angularjs – 从控制器看服务中的值

前端之家收集整理的这篇文章主要介绍了angularjs – 从控制器看服务中的值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个隔离业务逻辑的服务,并将其注入到需要信息的控制器中.我最终要做的是让控制器能够观察服务中的值,以便我不需要进行广播/通知或复杂的消息传递解决方案,让所有的控制器被通知数据的更改服务.

我创建了一个plnkr,展示了我正在努力做什么的基本想法.

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

控制器是否可以监视服务的值?

你已经在做正确了即将服务推送到作用域变量中,然后将该服务作为范围变量的一部分进行观察.

这是您的工作解决方案:

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

HTML

  1. <!doctype html>
  2. <html ng-app="plunker" >
  3. <head>
  4. <Meta charset="utf-8">
  5. <title>AngularJS Plunker</title>
  6. <script>document.write('<base href="' + document.location + '" />');</script>
  7. <link rel="stylesheet" href="style.css">
  8. <script src="http://code.angularjs.org/1.1.3/angular.js"></script>
  9. <script src="app.js"></script>
  10. </head>
  11. <body ng-controller="MainCtrl">
  12. <button ng-click="start()">Start Count</button>
  13. <button ng-click="stop()">Stop Count</button>
  14. ControllerData: {{controllerData}}
  15. </body>
  16. </html>

Javascript:

  1. var app = angular.module('plunker',[]);
  2.  
  3. app.service('myService',function($rootScope) {
  4. var data = 0;
  5. var id = 0;
  6.  
  7. var increment = function() {
  8. data = data + 1;
  9. $rootScope.$apply();
  10. console.log("Incrementing data",data);
  11. };
  12.  
  13. this.start = function() {
  14. id = setInterval(increment,500) ;
  15.  
  16. };
  17.  
  18. this.stop = function() {
  19. clearInterval(id);
  20. };
  21.  
  22. this.getData = function() { return data; };
  23.  
  24. }).controller('MainCtrl',function($scope,myService) {
  25. $scope.service = myService;
  26. $scope.controllerData = 0;
  27.  
  28. $scope.start = function() {
  29. myService.start();
  30. };
  31.  
  32. $scope.stop = function() {
  33. myService.stop();
  34. };
  35.  
  36. $scope.$watch('service.getData()',function(newVal) {
  37.  
  38. console.log("New Data",newVal);
  39. $scope.controllerData = newVal;
  40. });
  41. });

以下是您错过的一些事情:

> $scope.$watch中的变量的顺序是错误的.它(newVal,oldVal)而不是其他方式.>因为你正在使用setInterval,这是一个异步操作,你必须让角度知道事情发生了变化.这就是为什么你需要$rootScope.$apply.>你不能看一个函数,但你可以看到函数返回的.

猜你在找的Angularjs相关文章