角度:跟踪模型中的每一个变化



更新: 我最终使用了访问模型并在 setter 内部调用外部更改跟踪的属性。

get text(): string { 
return model.text
}
set text(value: string) {
// <-- Call the change tracker here
this.model.text = value;
}

原始问题

我有一个使用 AngularJS 编写的系统,我需要从外部跟踪每个模型的变化(跟踪脏(。在 AngularJS 中,它很简单,只需为每个模型的属性添加观察程序(包括数组内元素属性的更改(。注意:模型用作 UI 组件的数据。

数据流如下所示:

  1. SPA 从服务器请求数据。
  2. 服务器获取数据。
  3. 在返回数据之前,会将观察程序添加到每个模型的属性中。
  4. 监视的模型将返回到 SPA。

以下是监视更改的主要代码:

public attachModel(obj : any, id : string, scope: ng.IScope, propertyName: string) {
var idObj = obj.Id;
this.attachedObjs[obj.Id] = obj; // Just keeping control of tracked objs
var that = this;
// The 'id' used in the watch is unique for the tracked property
scope.$watch(id, function () {
that.changeTracker(idObj, propertyName); // Calls dirty tracking
});
}

每次在任何模型中更改属性时,都会触发一个事件,并且模型的属性在外部更改控件中被标记为

我正在尝试在新的 Angular 中找到此功能的替代品,但我觉得我没有走在正确的道路上,我目前唯一的选择是:

  • 使用 RxJSDo方法调用脏跟踪。
  • 使用 ngrx 可观察量并添加@Effects以触发脏跟踪。

一件重要的事情是,在 AngularJS 中,我有一个点,所有模型都被添加到脏跟踪控制中。

有没有办法在 Angular 中实现这一目标?或者一种拦截 Angular 的变化检测以触发脏跟踪的方法?

注意:我在初次搜索时发现了一个不知何故错过的问题,在ngForm之外有什么方法可以实现这一点吗?如何观察 Angular 2 中的表单变化?

如果要跟踪的模型是角度形式的表单输入,则可以侦听 valueChanges 流。

最新更新