在AngularJs中是否有与KnockoutJs相同的isObservable

时间:2014-11-14 02:20:23

标签: angularjs knockout.js asp.net-web-api

我在Asp.net Web Api 2上运行了一些示例,我最终将要开发的项目将使用AngularJs。我正在处理的几个数据绑定方案将实现angular $watch,据我所知,在此函数上将deep标志设置为true将通知新值和旧值,但不是在属性级别 - 仅在数组对象级别。最终目标是能够隔离属性更改并将此更改作为PATCH请求发送到Web Api,而不是将整个对象作为PUT请求发送。

我的示例目前正在使用knockoutJs,该方法有一个模型,表示需要监视的属性值设置为observable(propName)的数据。我的问题基本上是否可以将以下knockoutJs代码转换为Angular中类似的代码:

  self.watchModel = function (model, callback) {
    for (var key in model) {
      if (model.hasOwnProperty(key) && ko.isObservable(model[key])) {
        self.subscribeToProperty(model, key, function (key, val) {
          callback(model, key, val);
        });
      }
    }
  }

  self.subscribeToProperty = function (model, key, callback) {
    model[key].subscribe(function (val) {
      callback(key, val);
    });
  }

模型看起来类似于以下内容:

var obsEmployee = {
    Id: employee.Id,
    Name: ko.observable(employee.Name),
    Email: ko.observable(employee.Email),
    Salary: ko.observable(employee.Salary),
  }

我确信Angular中有一个等效的方法,或者实现上的差异非常大,还有另一种方法。

1 个答案:

答案 0 :(得分:0)

没有。 Angular使用脏检查而不是订阅/通知框架。因此,每个观察到的变量都是可观察的。有关详细信息,请参阅此处:http://www.sitepoint.com/understanding-angulars-apply-digest/