2012-10-19 32 views
1

我正在嘗試使用AngularJS創建一個簡單的消息服務(請參閱jsFiddle),並且它的大部分工作。但是,我的「clearAlerts()」方法似乎沒有任何效果。我是Angular的新手,所以我不確定自己做錯了什麼?如何從AngularJS的另一個控制器中的一個控制器中清除範圍?

這裏的的jsfiddle http://jsfiddle.net/uberspeck/j46Yh/

...和代碼

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?? 
     } 
    }; 
});​ 

回答

0

帕維爾·科茲洛夫斯基是那種足以提供通過AngularJS mailing list我的答案。我只是不得不改變一行在我AlertsCtrl ...

function AlertsCtrl($scope, alertsManager) { 
    $scope.alertsManager = alertsManager; 
} 

退房的new working jsFiddle

+0

小提琴鏈路斷開時 –

+0

此外,更改這一行沒有解決你在OP發佈的小提琴。 –

+1

我意外刪除了小提琴。這是一個有效的。 http://jsfiddle.net/uberspeck/j46Yh/6/ – Brian

0

另一種解決方法就是去除警報的性能。

http://jsfiddle.net/j46Yh/4/

clearAlerts: function() { 
     for(var x in this.alerts) { 
      delete this.alerts[x]; 
     } 
    } 
+1

這裏是最終版本。爲刪除,copy()方法被推薦給我... http://jsfiddle.net/uberspeck/HU4Eu/ – Brian

+0

有趣!感謝您對它進行評論。 –

相關問題