2017-06-01 20 views
1

我正在使用组件中的textarea,但是我的ngModelChange似乎不工作。使用ngModelChange角度未检测到textarea更改

<textarea [ngModel]="something?.commentaire" (ngModelChange)="something.commentaire">{{something.commentaire}} 

但是,当我改变something的评注的文字区域,{{something.commentaire}}不会改变。

任何想法我怎么能解决它?

这个问题不同于two way binding with elvis-operator,因为我的问题不是关于elvis操作符以及如何使用它。相反,它与方式有关,标签textarea处理事件的变化。

+0

我认为这可能是有用的为你检查出模板语法:) https://angular.io/docs/ts/latest/guide /template-syntax.html – Alex

+0

@echonax我认为这个和你所指的稍有不同。 OP不知道'ngModelChange'通过'$ event'变量发出变化。 – borislemke

+0

@borislemke即使那是真的,OP会通过查看链接获得这方面的知识:-) – echonax

回答

3

其分配给变量something.commentaire,要采取$event数据,并用它做什么。

(ngModelChange)="doSomething($event)" 

上面,$event变量是从textarea发射的变化。

component.ts

doSomething($event) { 

     // Do something with $event, you could for example, 
     // convert it to an URL format 
     // Imaginery function: "My name is Jeff" => "my-name-is-jeff" 
     const uri = makeUri($event) 

     // Now you have to set it to the variable you want it to 
     // bind to, so the model gets updated with the new value 
     this.something.commentaire = uri 
    } 

如果你不需要做数据任何东西,只是想将其绑定到一个变量,你可以用“香蕉一箱”的语法:

[(ngModel)]="something.commentaire" 

请注意,您不能使用elvis operator等待数据加载,否则将打破模型绑定

[(ngModel)]="something?.commentaire" // Not working! 

引擎盖下,这句法实际上取代:

[ngModel]="something.commentaire" (ngModelChange)="something.commentaire = $event" 
+0

很好的答案,谢谢 ! – edkeveked

1

你可以使用ngModel“框中语法香蕉”:

<textarea [(ngModel)]="something.commentaire">{{something.commentaire}} 

它是使用ngModelChange引擎盖下的快捷方式。

不过,这并不与埃尔维斯运营商合作,让你在ngModelChange采取的$event优势:的[ngModel](ngModelChange)

<textarea [ngModel]="something?.commentaire" (ngModelChange)="something?.commentaire ? something.commentaire=$event:null">{{something.commentaire}} 
+2

我不认为你可以使用双向绑定的猫王操作符AFAIR:/ – echonax

+0

它不起作用。此语法在浏览器中引发错误 – edkeveked

+0

@echonax,谢谢,我不知道 –

0

使用您的需求,基础是完全正确的。只有你需要做的是在(ngModelChange)上调用一个函数。存储在变量$event中的角度(模型更改之后)发出的事件应传递给该函数。在发出你的情况下,事件是string型的,你可以在使用ngModelChange绑定属性从方法OnChange().

<textarea [ngModel]="something?.commentaire" (ngModelChange)="OnChange($event)">{{something.commentaire}} 

OnChange(event : string){ 
    this.something.commentaire = event; 
}