我最近为我正在从事的一个项目选择了 AngularJS 而不是 ember.js,到目前为止,我对它感到非常满意。ember 的一个优点是它内置了对具有自动数据绑定的“计算属性”的支持。我已经能够使用下面的代码在 Angular 中完成类似的事情,但不确定这是否是最好的方法。
// Controller
angular.module('mathSkills.controller', [])
.controller('nav', ['navigation', '$scope', function (navigation, $scope) {
// "Computed Property"
$scope.$watch(navigation.getCurrentPageNumber, function(newVal, oldVal, scope) {
scope.currentPageNumber = newVal;
});
$scope.totalPages = navigation.getTotalPages();
}]);
// 'navigation' service
angular.module('mathSkills.services', [])
.factory('navigation', function() {
var currentPage = 0,
pages = [];
return {
getCurrentPageNumber: function() {
return currentPage + 1;
},
getTotalPages: function() {
return pages.length;
}
};
});
// HTML template
<div id=problemPager ng-controller=nav>
Problem {{currentPageNumber}} of {{totalPages}}
</div>
我希望用户界面currentPage
在navigation
服务更改时更新,上面的代码完成了。
这是在 AngularJS 中解决这个问题的最佳方法吗?$watch()
像这样使用有(显着的)性能影响吗?$emit()
使用自定义事件和or会更好地完成这样的事情$broadcast()
吗?