使用 http 攔截器響應 Flash 訊息
在檢視檔案中
在我們通常包含角度指令碼或在應用程式中共享的 html 的基本 html(index.html)
中,留下一個空的 div 元素,flash 訊息將出現在這個 div 元素中
<div class="flashmessage" ng-if="isVisible">
{{flashMessage}}
</div>
指令碼檔案
在 angular 模組的 config 方法中,注入 httpProvider,httpProvider 有一個攔截器陣列屬性,推送自定義攔截器,在當前示例中,自定義攔截器只攔截響應並呼叫附加到 rootScope 的方法。
var interceptorTest = angular.module('interceptorTest', []);
interceptorTest.config(['$httpProvider',function ($httpProvider) {
$httpProvider.interceptors.push(["$rootScope",function ($rootScope) {
return { //intercept only the response
'response': function (response)
{
$rootScope.showFeedBack(response.status,response.data.message);
return response;
}
};
}]);
}])
由於只有提供者可以注入角度模組的配置方法(即 httpProvider 而不是 rootcope),因此在角度模組的 run 方法中宣告附加到 rootscope 的方法。
同時在$ timeout 內顯示訊息,以便訊息具有 flash 屬性,該屬性在閾值時間後消失。在我們的例子中它是 3000 毫秒。
interceptorTest.run(["$rootScope","$timeout",function($rootScope,$timeout){
$rootScope.showFeedBack = function(status,message){
$rootScope.isVisible = true;
$rootScope.flashMessage = message;
$timeout(function(){$rootScope.isVisible = false },3000)
}
}]);
常見的陷阱
試圖注入 $ rootScope 或任何其他服務的內部配置角度模組的方法,角度應用程式犯規的生命週期允許和未知的提供程式錯誤將被丟擲。只有提供者可以注入角度模組的配置方法