指令中的异步HostBinding

Noé*_*aün 15 angular

我正在寻找使用异步值处理HostBinding的最佳方法.

在Angular v2.1.2之前,我可以host@Directive装饰器中使用这样的属性:

@Directive({
    selector: 'img[my-directive]',
    host    : {
        '[alt]'  : "alt | async"
    }
})
export class MyDirective {
    alt: Observable<string>;
}
Run Code Online (Sandbox Code Playgroud)

但看起来这不是预期的行为,因为版本2.1.2修复了它.请参阅不访问视图局部变量或主机表达式中的管道.

现在,在使用AoT编译进行编译时,我得到了Parser Error: Host binding expression cannot contain pipes in Directive.

San*_*r_P 10

Tobias Bosch(Angular团队成员)写道:

组件("子")的主机绑定在使用该组件("父")的组件中执行.父组件可以属于不同的NgModule.因此,如果使用管道,则管道将针对父组件的NgModule进行解析.但是,如果NgModule未声明您正在使用的管道,则组件已损坏.

这就是我们从未希望在主机绑定中使用管道的原因.在2.0 final之前的一个较大的编译器重构之后,我们不小心重新引入了它,但这是一个bug,而不是一个特性,因为语义是错误的.

资源:

异步主机绑定不再起作用#12671

  • 好吧,忘记管道。可观察对象呢?为什么它不能只查看值,检查 `isObservable(...)` 并采取相应措施?随着你对 RxJS 越来越熟悉,这是让所有东西很好地协同工作的最大缺失链接之一。如果`Observable.isObservable()` 返回true,我希望它在我创建HostBinding 时自动订阅以自动订阅。主机绑定已经是“魔法”了吧!? (3认同)