Service 如何从AngularJS中的另一个控制器清除一个控制器中的作用域?
我正在尝试使用AngularJS创建一个简单的消息服务see JSFIDLE,它在大部分情况下都能正常工作。然而,我的clearAlerts方法似乎没有任何效果。我是新手,所以我不确定我做错了什么 这是JSFIDLE …和代码Service 如何从AngularJS中的另一个控制器清除一个控制器中的作用域?,service,messages,controllers,angularjs,alerts,Service,Messages,Controllers,Angularjs,Alerts,我正在尝试使用AngularJS创建一个简单的消息服务see JSFIDLE,它在大部分情况下都能正常工作。然而,我的clearAlerts方法似乎没有任何效果。我是新手,所以我不确定我做错了什么 这是JSFIDLE …和代码 var App = angular.module('App', []); function AlertsCtrl($scope, alertsManager) { $scope.alerts = alertsManager.alerts; } functio
var App = angular.module('App', []);
function AlertsCtrl($scope, alertsManager) {
$scope.alerts = alertsManager.alerts;
}
function FooCtrl($scope, alertsManager) {
$scope.doGood = function() {
alertsManager.addAlert('Yay!', 'alert-success');
};
$scope.doEvil = function() {
alertsManager.addAlert('Noooo!', 'alert-error');
};
$scope.reset = function() {
alertsManager.clearAlerts();
};
}
App.factory('alertsManager', function() {
return {
alerts: {},
addAlert: function(message, type) {
this.alerts[type] = this.alerts[type] || [];
this.alerts[type].push(message);
},
clearAlerts: function() {
this.alerts = {}; // <= not working??
}
};
});
帕维尔·科兹洛夫斯基(Pawel Kozlowski)通过互联网提供了我的答案。我只需要在我的AlertsCtrl中更改一行
function AlertsCtrl($scope, alertsManager) {
$scope.alertsManager = alertsManager;
}
查看另一种解决方案是只删除警报上的属性
另外,更改这一行并不能修复你在专栏文章中发布的小提琴。我不小心删除了小提琴。这是一个有效的。哦,酷。这真的很有趣,这是解决方案的要求。这是最终版本。对于删除,建议我使用复制方法。。。有趣的谢谢你的评论。
clearAlerts: function() {
for(var x in this.alerts) {
delete this.alerts[x];
}
}