我創建了一個Angular服務,它作爲一個簡單的機制,在整個我的應用程序(代碼如下)的常見位置處理成功/警告/錯誤/信息警報給用戶。這些警報綁定到Angular-UI警報元素,列出所有警報。我的控制器處理管道。
所以我的問題是如何導致我的應用程序中的每個控制器調用$ alert.clear()在控制器的銷燬?我相信我可以從每一個控制器調用這樣的事情該做硬盤的方式:
$scope.$on('$destroy', function(){
$alerts.clear();
});
不過,我真的不希望這樣的樣板東西洋洋灑灑。我希望能夠在我的應用程序中控制所有控制器通用的行爲,並忘記它。
預先感謝您在正確的方向輕輕推動或暴力thwack!
HTML片段
<alert ng-repeat="alert in alerts" type="alert.type" close="closeAlert($index)">{{alert.msg}}</alert>
service.alert.js
app.factory('$alert', function() {
var alerts = [];
var clearAlerts = function() {
alerts = [];
};
var closeAlert = function(index, clearOthers) {
alerts.splice(index, 1);
};
var createAlert = function(type, message, clearOthers) {
if (clearOthers)
alerts = [];
alerts.push({type: type, msg: message});
};
var alertSuccess = function(message, clearOthers) {
clearOthers = clearOthers || true;
createAlert('success', message, clearOthers);
};
var alertInfo = function(message, clearOthers) {
clearOthers = clearOthers || true;
createAlert('info', message, clearOthers);
};
var alertWarning = function(message,clearOthers) {
clearOthers = clearOthers || true;
createAlert('warning', message, clearOthers);
};
var alertDanger = function(message, clearOthers) {
clearOthers = clearOthers || true;
createAlert('danger', message, clearOthers);
};
return {
$alerts: function() { return alerts; },
$success: function(message, clearOthers) { return alertSuccess(message, clearOthers); },
$info: function(message, clearOthers) { return alertInfo(message, clearOthers); },
$warning: function(message, clearOthers) { return alertWarning(message, clearOthers); },
$danger: function(message, clearOthers) { return alertDanger(message, clearOthers); },
$clear: function() { return clearAlerts(); },
$close: function(index) { return closeAlert(index); }
};
});
美麗!謝謝!即使我必須進行顯式繼承調用,至少我可以根據需要添加常見行爲,而不用觸摸除父控制器之外的其他任何東西。我非常感謝幫助。您也向我明確表示,我需要在AngularJS文檔中進行更多的閱讀,因爲我不確定它是否在我腦海中凝聚成控制器是具有繼承性的對象。 – Michael
很高興有幫助:-) – Ben