2017-06-01 50 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; 
}