私は最近、私が取り組んでいるプロジェクトでember.jsよりAngularJSを選択しました。これまでに非常に満足しています。 emberについての素晴らしい点の1つは、自動データバインディングを使用した「計算されたプロパティ」のサポートが組み込まれていることです。私は以下のコードでAngularで同様のことを達成することができましたが、それが最良の方法であるかどうかはわかりません。AngularJSの "Computed Properties"
// 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>
UIは、上記のコードが実現navigation
サービスの変更のたびにcurrentPage
を更新するために、私はたいです。
これはAngularJSでこの問題を解決する最善の方法ですか?このような$watch()
の使用には、(重要な)パフォーマンスの影響がありますか?カスタムイベントや$emit()
または$broadcast()
を使用すると、このようなことがうまくいくでしょうか?
を しかし、なぜあなたは一緒にすべてを貼りん たぶん、あなたはあなたのモジュールを分離しようとする必要がありますし、あなたのコントローラの宣言? – Nimaen
さて、モジュールはコントローラのためのモジュールであり、トップレベルのコントローラを保持するのではなくて – ithkuil