试图更深入地了解 Angular 如何处理数据绑定(bind)并更好地理解它,但有一件事我很难理解 -
在 Knockout 中,我使用计算来跟踪属性的更改。在 Angular 中,它将这个逻辑移动到 View 中,这对我来说是微不足道的,但如果这是我理解的方式。
我的问题是,当我使用 Breeze/Angular 初始化新实体时,如何创建类似计算的属性,以便在实体属性发生更改时收到通知?
myEntity.fullName = ko.computed(function () {
return myEntity.firstName + ' ' + myEntity.LastName;
});
在 Angular 中相当于
myEntity.fullName = function () {
return myEntity.firstName + ' ' + myEntity.LastName;
};
这是否正确地跟踪实体?
最佳答案
简单地将其设为函数是正确的。如果您的实体如图所示被添加到 $scope
,那么您将像这样访问该属性:
<span class="fullname">{{ user.fullName() }}</span>
每当 Angular 运行
$digest
循环,它将检查绑定(bind)属性的更改。在这种情况下,这意味着它将调用 fullName()
函数并检查结果是否已更改。如果有,任何有 $watch
附加到该项目 - 包括简单绑定(bind) - 将被通知更改。然而,这项技术的一个警告是确保在您的函数中执行的操作相对较快,并且没有副作用。像这样的绑定(bind)函数将在整个应用程序中多次调用。
如果您需要更复杂的功能,最好在 Controller 中处理它,并在对象更改时手动更新对象的属性。
关于angularjs - Angular/Breeze Initializer 中的 KO.Computed 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18222111/