Angular 2 ngModel双向绑定有时不起作用

时间:2017-05-19 19:40:24

标签: angular data-binding angular2-forms

我有一个带有字符串变量的对象,该变量绑定到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;

2 个答案:

答案 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 ...