KO.Angular/Breeze Initializer中的计算等效项

PW *_*Kad 20 angularjs breeze

试图更深入地了解Angular如何处理数据绑定并更好地理解它,有一件事很难让我理解 -

在Knockout中,我使用一个计算来跟踪属性的变化.在Angular中,它将这个逻辑移动到视图中,这对我来说是微不足道的,但如果这是我理解的方式.

我的问题是,当我使用Breeze/Angular初始化一个新实体时,如何创建类似于计算机的属性,这些属性会在实体属性发生更改时得到通知?

myEntity.fullName = ko.computed(function () {
    return myEntity.firstName + ' ' + myEntity.LastName;
});
Run Code Online (Sandbox Code Playgroud)

在Angular中相当于

myEntity.fullName = function () {
    return myEntity.firstName + ' ' + myEntity.LastName;
};
Run Code Online (Sandbox Code Playgroud)

这是否正确跟踪实体?

Ove*_*ous 18

简单地将它变成一个函数是正确的.如果您所显示的实体已添加到$scope,则您将访问该属性,如下所示:

<span class="fullname">{{ user.fullName() }}</span>
Run Code Online (Sandbox Code Playgroud)

每当Angular运行一个$digest循环时,它将检查绑定属性的更改.在这种情况下,这意味着它将调用该fullName()函数并检查结果是否已更改.如果有,任何$watch附加到该项目的内容(包括简单绑定)都会收到更改通知.

但是,这种技术的一个警告是确保在您的功能中执行的操作相对较快,并且没有副作用.像这样的绑定函数将在整个应用程序中多次调用.

如果需要更复杂的函数,最好在控制器中处理它,并在对象更改时手动更新对象的属性.