Niedawno wybrałem AngularJS nad ember.js dla projektu, nad którym pracuję i byłem z niego bardzo zadowolony. Jedną z zalet embera jest wbudowana obsługa "właściwości obliczeniowych" z automatycznym wiązaniem danych. Udało mi się osiągnąć coś podobnego w Angular z kodem poniżej, ale nie jestem pewien, czy jest to najlepszy sposób na zrobienie tego."Computed Properties" w 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>
chciałbym dla UI do aktualizacji, gdy currentPage
zmian serwisowych navigation
, który realizuje powyższy kod.
Czy to najlepszy sposób na rozwiązanie tego problemu w AngularJS? Czy istnieją (znaczące) konsekwencje związane z wydajnością korzystania z tej metody w przypadku korzystania z usługi $watch()
? Czy coś takiego byłoby lepiej zrealizowane przy użyciu niestandardowych zdarzeń i $emit()
lub $broadcast()
?
to lepiej rzeczywiście Jednak dlaczego trzymać wszystko razem Może powinieneś spróbować oddzielić moduł i? twoje deklaracje kontrolera? – Nimaen
Cóż, moduł jest modułem dla kontrolera, zamiast utrzymywania kontrolera najwyższego poziomu – ithkuil