角度依赖注入:使用AoT(Ahead of Time)进行编译时,Parent为null

时间:2017-06-12 14:25:36

标签: angular angular-cli

我得到了一个指令,它在构造函数中注入了它的父指令(相同类型)。它正在使用'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.parentnull

任何人都知道可能是什么问题?它可能是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

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