在Angular2中将自定义指令绑定到Observable

Posted

技术标签:

【中文标题】在Angular2中将自定义指令绑定到Observable【英文标题】:Binding custom directive to Observable in Angular2 【发布时间】:2016-11-02 21:16:25 【问题描述】:

我似乎无法弄清楚数据绑定如何与 Angular2 中的自定义指令一起工作。假设我有一个自定义指令FoobarDirective,它接受一个@Input,它是一个Observable

@Directive(
  selector: 'foobar'
)
export class FoobarDirective implements OnInit 
  @Input() anObservable: Observable<string[]>;

  ngOnInit() 
    this.anObservable.subscribe(values => 
      console.log(values);
    );
  

还有一个像这样的实现组件:

@Component(
  selector: 'my-app',
  providers: [],
  template: `
    <div>
      <h2> message </h2>
      <div foobar [anObservable]="toBind"></div>
    </div>
  `,
  directives: [FoobarDirective]
)
export class App implements OnInit 
  message: string;
  toBind: Subject<string[]>;

  ngOnInit() 
     this.message = 'Angular2 works!';

     this.toBind = new Subject<string[]>();
     this.toBind.next(['a', 'b', 'c']);
  

...但我收到以下错误: Can't bind to 'anObservable' since it isn't a known native property.

这是plunker。

【问题讨论】:

【参考方案1】:

我认为问题在于您的指令的选择器:

@Directive(
  selector: '[foobar]' // <------
)
export class FoobarDirective implements OnInit 
  (...)

由于您使用了错误的选择器,因此不会应用该指令,因此 Angular2 不知道此输入...

【讨论】:

以上是关于在Angular2中将自定义指令绑定到Observable的主要内容,如果未能解决你的问题,请参考以下文章

Angular2-无法给元素的属性做双向绑定,除非这个属性是指令或者组件

一“括”抵千言 —— Angular 2中的绑定

angular2 自定义指令输入语法

Angular2:条件显示,绑定到 [hidden] 属性与 *ngIf 指令 [重复]

在 spring 中将 Path 变量绑定到自定义模型对象

angular2采用自定义指令(Directive)方式加载jquery插件