我有另一个控制器可用的方法,它返回当前的报告数据,当我更改报告时,我没有在我的指令中获取新数据,它仍然显示旧数据,如果我刷新浏览器,它给出了新数据。
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
}
}
});
请帮助我,并提前致谢。
答案 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