Este documento describe varios conceptos clave de lógica de negocio en AngularJS, incluyendo depuración con Chrome y Batarang, inyección de dependencias, formas de definir fábricas, servicios, proveedores y controladores, y el uso de valores, constantes y decoradores. También proporciona recursos para ampliar los conocimientos sobre AngularJS como el sitio oficial, extensiones para Chrome y cursos en línea.
2. Debug
Chrome + Batarang
$scope
Todos los navegadores
Muestra scope del elemento seleccionado
angular.element($0).scope();
Command Line API Reference
https://developer.chrome.com/devtools/docs/commandline-api
3. Inyección de dependencias
Ubicación
angular.injector(['ng', 'myModule']);
angular.element($0).data().$injector;
Seleccionando el elemento que tiene el ng-app
TODO es singleton!!!
4. Formas de inyectar
Método directo
NO recomendado. Problemas con minificación
myModule.factory(‘myFactory’, function($scope){ … });
Asignar a la función una variable estática $inject
var factory = function(scope) { … };
factory.$inject = [‘$scope’];
myModule.factory(‘myFactory’, factory);
Asignado los nombres en línea
myModule.factory(‘myFactory’, [‘$scope’, function(scope) { … }]);
5. Inyector
Métodos
annotate
has
get (patron ServiceLocator)
Invoke
Instatiate
8. Service
Injección por Instantiate
myModule.service(‘myService’, […, function(…) {
this.helloWorld = function() {
console.log('hello world');
};
}]);
9. Provider
Injección por Instantiate
Puede inyectarse en el config “myProviderProvider”
myModule.provider(‘myProvider’, […, function(…) {
var _text = '';
function helloWorld() { console.log(_text); }
this.setText(text) { _text = text; };
this.$get = function(...) {
return helloWorld;
};
}]);
10. ControllerAs
Injección por Instantiate
myModule.controller(‘myController’, function() {
this.name = “Xavi”;
}
Uso de this
<body ng-controller="myController as alias">
<input type="text" ng-model="alias.name">
<span>{{alias.name}}</span>
</body>
11. Controller tradicional
Injección por Instantiate
myModule.controller(‘myController’, function($scope) {
$scope.name = “Xavi”;
}
Uso de this
<body ng-controller="myController">
<input type="text" ng-model="name">
<span>{{name}}</span>
</body>