Angular 2表达式解析器和ng-init指令

Est*_*ask 13 javascript typescript angular2-directives angular2-template angular

基本上我正在寻找一种方法来实现Angular 1.x ngInit指令的对应物.

我知道ngOnInit钩子以及它是初始化代码的推荐位置.我认为ngInit指令是一种快速的,声明性的方式来原型化或修复一个通常不应该在编写良好的生产代码中使用的组件(尽管开发人员有权选择对他/她最有利的方法).

init伪指令中做类似的事情

<p [init]="foo = 1; bar()"><p>
Run Code Online (Sandbox Code Playgroud)

多次评估表达式并导致

模板解析错误:

分析器错误:绑定不能包含分配

错误.

在Angular 1.x中,它可以完成

$parse($attrs.init)($scope)
Run Code Online (Sandbox Code Playgroud)

如何使用Angular 2解析器并可能扩展它来评估foo = 1; bar()组件初始化时的模板表达式?

Est*_*ask 1

这可以通过指令来实现:

@Directive({ selector: '[initialize]' })
class InitializeDirective {
  @Output() initialize = new BehaviorSubject();
}
Run Code Online (Sandbox Code Playgroud)

预期用途是:

<div (initialize)="initViaMethodCall(); foo = 'init via assignment'"></div>
<ng-template (initialize)="bar = 'init with no extra markup'"></template>
{{ foo }}
{{ bar }}
Run Code Online (Sandbox Code Playgroud)