我得到了一个指令,它在构造函数中注入了它的父指令(相同类型)。它正在使用'SkipSelf',因此它不会获得在它所放置的组件上定义的指令(但在父节点的树上)。
@Directive({
selector: '[myDirective]'
})
export class MyDirective {
constructor(@SkipSelf() @Optional() public parent?: MyDirective) {
console.log('Directive: This is my parent: ' + this.parent);
}
}
此外,我得到了一个注入相同指令但正在查看自己的组件(因此这里没有使用SkipSelf)。
import {Component, Optional} from '@angular/core';
import {MyDirective} from '../directives/my-directive.directive';
@Component({
selector: 'my-component',
template: './my-component.html'
})
export class MyComponent {
constructor(@Optional() public parent?: MyDirective) {
console.log('Component: This is my parent: ' + this.parent);
}
}
示例-html看起来像这样:
<div myDirective> <!-- (Directive A) does not have a parent (of course) -->
<div>
<div myDirective> <!-- (Directive B) gets the parent (Directive A) -->
<my-component myDirective>
<!-- (Directive C) myDirective gets the parent (Directive B) -->
<!-- myComponent gets the parent directive (Directive C) -->
</my-component>
</div>
</div>
</div>
当我使用angular-cli(ng serve)编译'正常'时,一切都按预期工作。每个指令都获得对其父级的引用(当存在一个时),并且每个组件实例都获得对其上定义的指令的引用。
但是现在我在使用aot选项(ng serve --aot)进行编译时遇到了问题。指令仍然是他们的父母,但组件没有。 (相反,this.parent
是null
)
任何人都知道可能是什么问题?它可能是angular-cli中的一个错误吗?
我使用以下版本:
@angular/cli: 1.0.0
node: 7.6.0
os: win32 x64
@angular/...: 4.0.1
@angular/cli: 1.0.0
@angular/compiler-cli: 4.0.1
答案 0 :(得分:0)
我更新了角度和角度cli,幸运的是问题已解决。
@angular/cli: 1.1.1
node: 7.6.0
os: win32 x64
@angular/...: 4.2.2
@angular/cli: 1.1.1
@angular/compiler-cli: 4.2.2