不在custom指令中获取更新数据

时间:2015-03-04 08:19:56

标签: angularjs

我有另一个控制器可用的方法,它返回当前的报告数据,当我更改报告时,我没有在我的指令中获取新数据,它仍然显示旧数据,如果我刷新浏览器,它给出了新数据。

angular.controller("sample", ['$http', '$scope', function($http, $scope){
     $scope.getNewsData = function(){
        var data = {name: XYZ}
        return data;
     }
}])

我使用isolate scope(&)在我的指令中访问上面的控制器方法,我的问题是如何在不刷新浏览器的情况下获取新数据。

angular.directive('myDir',function(){
     return {
      restrict:'A',
      scope:{
           getNewsData :&getnew;
       },
      controller:'myDirController',
      templateUrl: 'news.html',
      link:function(scope, $elm, attr){           
          var obj = scope.getNewsData 
      } 
   }
});

请帮助我,并提前致谢。

1 个答案:

答案 0 :(得分:1)

您是否尝试过使用$rootScope.$broadcast$scope.$on

在指令中,每次更改数据时都会添加一个监听器。

app.directive('myDir',function(){
  return {
      scope:{
           getNewsData :"&"
       },
      link:function(scope, $elm, attr){           
        var obj = scope.getNewsData(); 
        var cleanup = scope.$on('changeValue', function() {
          console.log(scope.getNewsData());
          obj = scope.getNewsData();
        })

       //make sure to destroy to avoid memory leaks
        scope.$on('$destroy', cleanup);
      } 
   }
});

更改必须添加$rootScope.$broadcast

的值的方法
app.controller('OtherCtrl', function($scope,$rootScope,MainService) {
  $scope.changeValue = function() {
    MainService.setter("xyz");
    $rootScope.$broadcast('changeValue');
  }
});

我只是添加工厂来简单传递数据(setter / getter)

app.factory('MainService', function() {
  var data;
  return {
    getter: function() {
      return data;
    },
    setter: function(value) {
      data = value;
    }
  }

})
 对于工作演示,请单击 here