$观看AngularJS服务中的数据

时间:2016-05-25 11:07:42

标签: javascript angularjs

我这里有一个服务sharedData和一个控制器HostController。我希望让HostController观看saveDataObj服务中的sharedData变量,然后将该值分配给host.dataOut,然后将其反映在视图中作为ngModel属性。

我的问题是我真的不知道如何使用$watch。我希望每次host.dataOut服务saveDataObj更改sharedData时更新setData(或者至少每次调用sharedData.getData(): Object { }时都更新。

以下代码在控制台中生成一行:
setData
这在初始化期间是预期的。但是,当我通过另一个控制器调用saveDataObj以将angular.module('app', []) .factory('sharedData',function(){ var saveDataObj = {}; return { getData: function(){ return saveDataObj; }, setData: function(data){ saveDataObj = data; } }; }) .controller('HostController',['$scope','sharedData',function($scope,sharedData){ $scope.sharedData = sharedData; var host = this; host.dataOut = {}; $scope.$watch( 'sharedData.getData()', function handleDataChange(newValue,oldValue) { console.log("sharedData.getData():",newValue); host.dataOut = newValue; } ); }]) 更改为其他值时,没有任何内容记录到控制台。

我做错了什么?

numpy

2 个答案:

答案 0 :(得分:0)

.controller('HostController',['$scope','sharedData',function($scope,sharedData){
  $scope.sharedData = sharedData;
  var host = this;
  host.dataOut = {};
  $scope.serviceData = sharedData.getData(); //local variable
  $scope.$watch('serviceData', function(newValue, oldValue) {
      console.log("sharedData.getData():",newValue);
      host.dataOut = newValue;
    }
  );
}]);
希望能帮到你!

答案 1 :(得分:0)

回答我,OP:

问题不是因为我试图在服务中观察某些东西 - 而是我试图观察一个对象。为此,我需要声明$ watch的第三项objectEquality为真。

$scope.$watch(
  'sharedData.getData()',
  function handleDataChange(newValue,oldValue) {
    console.log( "sharedData.getData():", newValue );
  },
  true
);

https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope#$观看

我将此作为最佳答案,因为我是一个自恋者。