javascript - 检测组件内模型数据的变化

标签 javascript angular typescript

我想我可能遗漏了一些非常明显的东西,但这是我的情况 - 我有一些数据被分配给组件的 ngModel 输入,例如:

typescript :

SomeData = {
  SomeValue: 'bar'
}

View 模板片段:

<foo [(ngModel)]="SomeData.SomeValue"></foo>

组件:

import { Component, OnChanges, SimpleChanges } from '@angular/core';

@Component({
  selector: 'foo',
  template: `<input type="text" [ngModel]="value" (ngModelChange)="modelChange($event) 
(change)="elementChange($event)"/>`
})
export class FooComponent {

  ngOnChanges(changes: SimpleChanges) {
    // Fired when @Input members change
  }

  modelChange(value) {
    // Fired when a change in the HTML element will change the model, *not* when the model changes from elsewhere 
  }

  elementChange(event) {
    // Fired when the HTML element value changes
  }
}

根据我在示例中的评论,我能够判断输入何时更改、HTML 元素的值何时将更改模型以及 HTML 元素的值何时更改。

我希望能够从组件内部知道 View 模板中分配给 ngModel 的属性(即 SomeData.SomeValue)何时发生变化。我知道 Angular 会自己执行此操作,因为它会更新 HTML 中的值,但是我也不知道如何从组件内部拦截此更改,因此可能会采取其他一些操作。

最佳答案

SomeData.SomeValue 不受 Angular 控制,您所做的只是告诉 Angular 绑定(bind)到一个属性并绑定(bind)到一个事件。然后 Angular 将运行它自己的更改检测机制来更新 View 。如果您对 Angular 如何做到这一点感兴趣,请查看此 blog .

如果您希望在 SomeData.SomeValue 发生更改时收到通知,您必须设置自己的系统,这可以像回调或发布/订阅一样简单。但它真的太宽泛了,无法进入这里。

关于javascript - 检测组件内模型数据的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45047114/

相关文章:

javascript - Jquery 选择 HTML 表中 <td> 标记的第一个父级

javascript - Pepper:在js中使用logger类

Angular:更新路由数据

javascript - 当您使用来自 "ExpressionChangedAfterItHasBeenCheckedError"的信息时,如何避免 "Cannot Read Property of Undefined"或 "@ViewChild"?

node.js - nodemon 无法在 exec 参数中找到 ts-node

angular - 从 Firebase 存储下载文件不起作用

javascript - 使用 axios 进行 Firebase OAuth 登录和数据访问

javascript - 提高使用 jQuery 搜索 JSON 对象的性能

angular - 如何在 Angular 5+ 中使用 ngx-file-drop 验证文件?

javascript - Angular 2 和 NodeJS 项目设置