Service 如何从AngularJS中的另一个控制器清除一个控制器中的作用域?

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

我正在尝试使用AngularJS创建一个简单的消息服务see JSFIDLE,它在大部分情况下都能正常工作。然而,我的clearAlerts方法似乎没有任何效果。我是新手,所以我不确定我做错了什么

这是JSFIDLE

…和代码

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];
        }
    }