我有一个带有字符串变量的对象,该变量绑定到textarea。在(ngModelChange)中,我有一个函数,用于在编辑字符串时检查字符串的长度,如果字符串太长,则指定一个"之前的值"实际价值。像这样:
t.value = t.previousValue;
这不起作用。当我调试时,我看到变量被分配,一切看起来不错,但数据绑定不会更新。但是,如果我将t.previousValue更改为" test",则可以正常更新textarea。
t.value = "test";
有什么区别?
相关代码:
<textarea type="text" class="form-control" [(ngModel)]="t.value" (ngModelChange)="isOverflowing(t)"></textarea>
if (this.textArea.nativeElement.clientHeight < this.textArea.nativeElement.scrollHeight){
if(t.value.length - t.previousValue.length > 1){
t.value = t.previousValue;
}else{
t.value = t.value.substring(0,t.value.length-2);
}
}
t.previousValue = t.value;
答案 0 :(得分:1)
如果您手动设置更改事件,则不应使用带有ngModel的香蕉盒:
<textarea type="text" class="form-control" [(ngModel)]="t.value" (ngModelChange)="isOverflowing(t)"></textarea>
应该是:
<textarea type="text" class="form-control" [ngModel]="t.value" (ngModelChange)="isOverflowing(t)"></textarea>
请注意,ngModel
现在只绑定1路而不是2路,因为您已将其他绑定与ngModelChange
连接起来。
见这里:
https://angular.io/docs/ts/latest/guide/template-syntax.html
答案 1 :(得分:-1)
仅适用于初学者: 如果您使用[(ngModel)] =“输入”功能,您的页面将隐藏该时间: 第一步: 打开app.module.ts - &gt;从'@ angular / forms'导入{FormsModule}; 第二步: 请参阅下面的示例页面,如app.module.ts导入:[BrowserModule]你应该添加像这样导入的FormsModule:[BrowserModule,FormsModule]
然后立即运行你的app ..working app ...