Javascript 指令/作用域继承
也许这是一个两个问题合一的问题。我知道您必须明确声明要在Angular 2的组件中使用的指令。这是否会传播到组件的子组件,如果不是,是否可以使其成为子组件?其次,组件上声明的变量是否会传播到子组件,还是必须显式传递给组件?从beta版开始。14您必须显式列出Javascript 指令/作用域继承,javascript,angularjs,angular,Javascript,Angularjs,Angular,也许这是一个两个问题合一的问题。我知道您必须明确声明要在Angular 2的组件中使用的指令。这是否会传播到组件的子组件,如果不是,是否可以使其成为子组件?其次,组件上声明的变量是否会传播到子组件,还是必须显式传递给组件?从beta版开始。14您必须显式列出@Component的指令数组中使用的所有指令。对于问题的第二部分,在组件上声明的变量(例如:this.name)不会传播到子组件。要实现这一点,您必须使用等属性在组件模板中显式传递它们,并且子组件必须包含@Input item属性 编辑:
@Component
的指令数组中使用的所有指令。对于问题的第二部分,在组件上声明的变量(例如:this.name
)不会传播到子组件。要实现这一点,您必须使用
等属性在组件模板中显式传递它们,并且子组件必须包含@Input item
属性
编辑:
要结合评论中的澄清。。。可以全局注册指令,但只能在bootstrap
函数中注册。在父组件上声明的指令将不被子组件继承
bootstrap(App, [
PLATFORM_DIRECTIVES,
provide(PLATFORM_DIRECTIVES, {useValue: [SomeDirective, SomeComponent], multi:true})
]);
他们计划实施你提到的。但是,它一直被推后,所以你必须等待。我想这是一个很难解决的问题,因为模块化的思想要求组件/模块没有隐含的依赖关系。如果你将你的子组件移动到其他地方,它会崩溃。这通常通过继承或依赖项注入来解决,这会在子组件和父组件之间建立牢固的联系,从而使子组件无法自行移动。我认为这与函数式编程一样有意义……不幸的是,这意味着我还有一些工作要做;)您可以使用provide(平台_指令,{useValue:[SomeDirective,SomeComponent],multi:true})使directves全局可用,与管道bootstrap(应用程序,[provide(平台_管道,{useValue:RainbowizePipe,multi:true})相同代码>感谢您的澄清