angularjs - Angular/Breeze Initializer 中的 KO.Computed 等效项

标签 angularjs breeze

试图更深入地了解 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/

相关文章:

javascript - 使用Breeze获取数据库中 "Ignore"d的数据

angularjs - 使用 Angular UI 滚动在列表顶部添加项目

php - 来自 MySQL DB 的 AngularJS 值

angularjs - Angular 2. 在共享主机上运行

javascript - 使用 Knockout、Breeze、Durandal 搜索可观察数组

javascript - BreezeJS REST 保存更改

javascript - 如何使用 BreezeJS 查询子实体的多个条件?

javascript - 从 Controller 访问指令元素

javascript - 在 Angularjs 中清除排序 HTML 表格

javascript - 一旦实例引用丢失,则编辑或删除BreezeJS EntityManager