如何对控制器上 angularjs 中服务中数据的变化做出反应
How to react to change in data in a service in angularjs on a controller
我希望能够在两个控制器之间共享数据,这样我就可以从第一个控制器向服务发送一个布尔值,这会触发第二个控制器的变化。
这是服务的样子
exports.service = function(){
// sets Accordion variable to false ;
var property = true;
return {
getProperty: function () {
return property;
},
setProperty: function(value) {
property = value;
}
};
};
现在第一个控制器
exports.controller = function($scope, CarDetailsService, AccordionService) {
$scope.saveDetails = function() {
AccordionService.setProperty(false);
}
}
和第二个
exports.controller = function($scope, AccordionService ) {
$scope.isCollapsed = AccordionService.getProperty();
}
用例是当我点击第一个控制器上的按钮时,服务更新其中的数据,然后在第二个控制器上提供,从而触发第二个控制器中的更改。
我已经四处寻找了一段时间,但找不到解决方案。也许我只是愚蠢。
在第二个控制器上,您可以 $watch 在第一个控制器中更改的变量:
scope.$watch('variable', function(newValue, oldValue) {
//React to the change
});
或者,您可以在 rootScope 上使用 $broadcast:
在第一个控制器上:
$rootScope.$broadcast("NEW_EVENT", data);
在另一个控制器上:
scope.$on("NEW_EVENT", function(event, data){
//use the data
});
我希望能够在两个控制器之间共享数据,这样我就可以从第一个控制器向服务发送一个布尔值,这会触发第二个控制器的变化。
这是服务的样子
exports.service = function(){
// sets Accordion variable to false ;
var property = true;
return {
getProperty: function () {
return property;
},
setProperty: function(value) {
property = value;
}
};
};
现在第一个控制器
exports.controller = function($scope, CarDetailsService, AccordionService) {
$scope.saveDetails = function() {
AccordionService.setProperty(false);
}
}
和第二个
exports.controller = function($scope, AccordionService ) {
$scope.isCollapsed = AccordionService.getProperty();
}
用例是当我点击第一个控制器上的按钮时,服务更新其中的数据,然后在第二个控制器上提供,从而触发第二个控制器中的更改。
我已经四处寻找了一段时间,但找不到解决方案。也许我只是愚蠢。
在第二个控制器上,您可以 $watch 在第一个控制器中更改的变量:
scope.$watch('variable', function(newValue, oldValue) {
//React to the change
});
或者,您可以在 rootScope 上使用 $broadcast:
在第一个控制器上:
$rootScope.$broadcast("NEW_EVENT", data);
在另一个控制器上:
scope.$on("NEW_EVENT", function(event, data){
//use the data
});