Angular 使用带OnChanges的指令时输入空白

Angular 使用带OnChanges的指令时输入空白,angular,angular-ngmodel,Angular,Angular Ngmodel,我正在试验一些东西,并有以下代码: @Directive({ selector: '[wildChild]' }) export class WildChildDirective implements OnChanges{ @Input() value: string; public ngOnChanges(changes: SimpleChanges){ console.log(this.value); console.log(changes.value);

我正在试验一些东西,并有以下代码:

@Directive({
  selector: '[wildChild]'
})
export class WildChildDirective implements OnChanges{
  @Input()
  value: string;

  public ngOnChanges(changes: SimpleChanges){
    console.log(this.value);
    console.log(changes.value);
  }
}
我的HTML代码如下:

<input type="text"  wildChild [value]="name" />

输入有值,无论{{name}}的值是什么,但不显示。为什么? Plnkr:


另外,我知道我可以使用
NgModel
,但我很好奇angular是如何工作的

您需要将元素拉入指令并手动为其赋值

@Directive({
  selector: '[wildChild]'
})
export class WildChildDirective implements OnChanges{
  @Input()
    value: string;

    constructor(private _el: ElementRef){}

    public ngOnChanges(changes: SimpleChanges){
      this._el.nativeElement.value = this.value;
   }
}

你到底希望发生什么?我希望输入应该显示它的值。好吧,当你试图以这种方式绑定东西时,这是一件令人困惑的事情。实际上,您所做的是将值绑定到名为“value”的html属性,而不是绑定到名为“value”的dom属性。属性用于初始化输入文本的值,以后不会生效。您应该做的是常规模板/反应式表单绑定,或者使用controlvalueaccessor访问元素值dom Property当我删除输入权限中的指令时,它可以完美地工作。指令是如何影响HTML元素行为的,我不明白。是的,有很多方法可以做到这一点,但我只是想了解这里发生了什么。@Skeptor这是因为angular附带了一个[value]指令。通过添加指令,您将覆盖内置指令。尝试添加回指令,但更改输入名称。您将看到本机angular指令起作用