convert change agregar angularjs

angularjs - agregar - ng-change



Observando un valor en un servicio desde un controlador. (1)

Ya lo estabas haciendo bien. es decir, empujar el servicio en una variable de alcance y luego observar el servicio como parte de la variable de alcance.

Aquí está la solución de trabajo para usted:

http://plnkr.co/edit/SgA0ztPVPxTkA0wfS1HU?p=preview

HTML

<!doctype html> <html ng-app="plunker" > <head> <meta charset="utf-8"> <title>AngularJS Plunker</title> <script>document.write(''<base href="'' + document.location + ''" />'');</script> <link rel="stylesheet" href="style.css"> <script src="http://code.angularjs.org/1.1.3/angular.js"></script> <script src="app.js"></script> </head> <body ng-controller="MainCtrl"> <button ng-click="start()">Start Count</button> <button ng-click="stop()">Stop Count</button> ControllerData: {{controllerData}} </body> </html>

Javascript:

var app = angular.module(''plunker'', []); app.service(''myService'', function($rootScope) { var data = 0; var id = 0; var increment = function() { data = data + 1; $rootScope.$apply(); console.log("Incrementing data", data); }; this.start = function() { id = setInterval(increment, 500) ; }; this.stop = function() { clearInterval(id); }; this.getData = function() { return data; }; }).controller(''MainCtrl'', function($scope, myService) { $scope.service = myService; $scope.controllerData = 0; $scope.start = function() { myService.start(); }; $scope.stop = function() { myService.stop(); }; $scope.$watch(''service.getData()'', function(newVal) { console.log("New Data", newVal); $scope.controllerData = newVal; }); });

Estas son algunas de las cosas que te perdiste:

  1. El orden de las variables en $ scope. $ Watch estaba equivocado. Es (newVal, oldVal) y no al revés.
  2. Dado que estaba trabajando con setInterval, que es una operación asíncrona, deberá informar a Angular que las cosas cambiaron. Es por eso que necesita $ rootScope. $ Apply.
  3. No puedes ver una función, pero puedes ver qué devuelve la función.

He creado un servicio para aislar la lógica empresarial y lo estoy inyectando en los controladores que necesitan la información. Lo que quiero hacer en última instancia es hacer que los controladores puedan ver los valores en el servicio para que no tenga que hacer una notificación / transmisión o una solución compleja de transmisión de mensajes para que todos los controladores sean notificados de los cambios en los datos. el servicio.

He creado un plnkr que demuestra la idea básica de lo que estoy tratando de hacer.

http://plnkr.co/edit/oL6AhHq2BBeGCLhAHX0K?p=preview

¿Es posible que un controlador vigile los valores de un servicio?