我最近選擇了AngularJS over ember.js作爲我正在開發的一個項目,並且迄今爲止一直非常滿意。關於ember的一個好處是它內置了支持自動數據綁定的「計算屬性」。我已經能夠用下面的代碼在Angular中完成類似的事情,但我不確定這是否是最好的方式。AngularJS中的「計算屬性」
// 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>
我想爲更新每當的navigation
服務變化currentPage
,其中,上述代碼完成的UI。
這是在AngularJS中解決這個問題的最好方法嗎?使用這樣的$watch()
會有(重大)性能影響嗎?像這樣的事情會更好地完成使用自定義事件和$emit()
或$broadcast()
?
這是更好地確實 不過,你爲什麼堅持一切融合在一起 也許你應該嘗試分開你的模塊?你的控制器聲明? – Nimaen
那麼,模塊是控制器的模塊,而不是保留一個最高級別的控制器 – ithkuil