- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Angular 文档中它说模块共享一个编译上下文。
NgModules provide a compilation context for their components. A root NgModule always has a root component that is created during bootstrap, but any NgModule can include any number of additional components, which can be loaded through the router or created through the template. The components that belong to an NgModule share a compilation context.
我只找到一种解释here .但我不太完全理解它或它的重要性。有人可以详细说明“编译上下文”的含义以及模块共享相同上下文的重要性吗?
最佳答案
Angular 文档说
The components that belong to an NgModule share a compilation context.
你听过这样的错误吗
WARNING: Template parse errors: 'A' is not a known element:
If 'b-comp' is an Angular component, then verify that it is part of this module.
If 'b-comp' is a Web Component then add 'CUSTOM_ELEMENTS_SCHEMA' to the '@NgModule.schemas' of this component to suppress this message.
或
Can't bind to 'ngModel' since it isn't a known property of 'input'
您发现,链接中的解释正确描述了编译上下文的概念。
它是一组将被编译的东西(文件,组件)。这意味着上下文包含编译器无误编译所需的一切。
假设您编译 typescript 并使用 tsconfig.json
文件控制上下文,其中定义了 files
、include
或 exclude
选项。这样, typescript 编译器将仅使用您提供的文件来查找您的 ts 代码之间的关系。
现在让我们回到 Angular 编译器。
Angular 编译器主要编译组件的模板。要编译模板,Angular 应该知道该模板中涉及的所有组件/指令。
假设我们有以下简单的组件:
@Component({
selector: 'a-comp`,
template: `
<h2>Hello, I'm a-comp</h2>
<div [scroll]="options">
<b-comp></b-comp>
</div>
`
})
export class ComponentA {}
这个组件是在一些 Angular 模块中定义的,例如:
@NgModule({
declarations: [
ComponentA
]
})
export class AModule {}
为了编译 ComponentA
,angular 经历了以下阶段:
1) 找到它所属的NgModule。
ComponentA 是在 AModule 中声明的,所以这个模块成为它的编译上下文。
2) 查找在此模块范围内的所有其他指令。
Angular 正在搜索这个 NgModule 的所有可传递模块。 ( Angular 2 Use component from another module )
3) 通过将所有涉及的指令传递给编译器来运行编译
compileComponent(outputCtx, compMeta, ngModule, ngModule.transitiveModule.directives
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
我们的 AModule
没有导入任何其他模块,也没有定义任何其他指令。这意味着 Angular 将无法编译 ComponentA 的模板(如果你当然没有使用 CUSTOM_ELEMENTS_SCHEMA):
<div [scroll]="options">
<b-comp></b-comp>
</div>
因为 Angular 编译器会寻找带有 scroll
@Input 和 b-comp
的指令,但我们的范围 AModule 不包含此类指令。
换句话说,NgModule 没有为构建组件提供正确的编译上下文。 NgModule 是 Angular 编译器的一种配置,类似于 typescript 编译器的 tsconfig.json
。
同样,在 NgModule 中声明的组件和从导出它们的其他模块导入的组件共享相同的编译上下文(这里有更多信息 Angular 2 Use component from another module)
关于angular - Angular 中的编译上下文是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50940048/
出现以下错误 Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable D
在调试应用程序时出现以下错误。 The CLR has been unable to transition from COM context 0x3b2d70 to COM context 0x3b2
在 GAE Go 中,为了记录,我们需要使用 appengine.NewContext(r) 创建一个新的上下文,它返回 context.Context。 如何使用此上下文在请求范围内设置/获取变量?
我想使用 Puppeteer 从放置在页面上 iframe 内的选择器中获取数据,该页面在与其父框架域不同的域上运行。因此,我不是任何域的所有者 - 无法使用 frame.postMessage。 试
我正在尝试获取可用的应用程序上下文并想切换到 webview 上下文,但 appium 仅获取 Navive App。 应用程序还启用了 WebView。 Appium 版本:1.10.1 Chrom
这个问题在这里已经有了答案: How to fix this nullOk error when using the flutter_svg package? (7 个回答) 7 个月前关闭。 当我尝
我观看了关于 Core Data 的 2016 WWDC 视频并查看了各种教程。我见过使用 Core Data Framework 创建对象以持久保存到 managedObjectContext 中的
这是代码 obj = { a: 'some value'; m: function(){ alert(this.a); } } obj.m(); 结果是'som
我正在尝试做类似的事情 $(".className").click(function() { $(this).(".anotherClass").css("z-index","1");
var User = { Name: "Some Name", Age: 26, Show: function() { alert("Age= "+this.Age)}; }; fun
我目前正在使用我见过的常见 Context 模式,它允许子组件通过传递修饰函数来更新父组件的状态(即 Provider)通过共享的 Context。 我遇到的问题是,修改函数只引用原始状态,不引用最新
有没有办法让 React Context类型安全与流类型? 例如: Button.contextTypes = { color: React.PropTypes.string }; 最佳答案 不幸
我想知道是否有一种方法可以为不同的功能使用不同的上下文类。 我希望有一个功能使用 MinkExtensions 进行浏览器测试,另一个功能使用和 HTTP 客户端(如 Guzzle)进行 API 测试
我有这个配置文件 apiVersion: v1 clusters: - cluster: server: [REDACTED] // IP of my cluster name: stag
我在实现非抢先式调度时遇到了用于初始化TCB的代码。 typedef struct TCB_t { struct TCB_t *next; struct TCB_t
我想将一个函数设置为数组中每个元素的属性,但使用不同的参数调用它。我想我会使用匿名函数来解决它: for ( var i = 0; i < object_count; i++ ) { obje
这个问题已经有答案了: How to access the correct `this` inside a callback (15 个回答) 已关闭 7 年前。 我正在做一些练习,但我在管道方法中丢
我正在尝试通过 Java 和 Android Studio 学习和制作 Android 应用程序。我对Java的了解程度是两年前几个小时的youtube学习和大学基础类(class)。不过我确实知道如
我在(这个)上遇到了问题。错误ImageView无法应用。我在 fragment 类中执行此代码。 ViewFlipper v_flipper; @Nullable @Override public
我想使用 openGL 的某些功能,但与渲染视觉内容无关。有没有办法在没有任何依赖性的情况下创建它(不是对 Windows,也不是某些包[SDL,SFML,GLUT])?只允许使用没有外部库的库,就像
我是一名优秀的程序员,十分优秀!