Recientemente elegí AngularJS sobre ember.js para un proyecto en el que estoy trabajando, y he estado muy satisfecho con él hasta el momento. Una cosa buena de ember es su soporte integrado para "propiedades computadas" con enlace de datos automático. Pude lograr algo similar en Angular con el siguiente código, pero no estoy seguro de si es la mejor manera de hacerlo."Propiedades calculadas" en 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>
Me gustaría que la interfaz de usuario para actualizar cada vez que el currentPage
de los navigation
cambios en el servicio, que realiza el código de seguridad.
¿Es esta la mejor manera de resolver este problema en AngularJS? ¿Hay implicaciones de rendimiento (significativas) para usar $watch()
de esta manera? ¿Se lograría algo como esto usando eventos personalizados y $emit()
o $broadcast()
?
Así está mejor hecho Sin embargo, ¿por qué usted se pega todo junto tal vez debería tratar de separar el módulo y? sus declaraciones de controlador? – Nimaen
Bueno, el módulo es el módulo para el controlador, en lugar de mantener un controlador de nivel superior – ithkuil