使用 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 或任何其他服务的内部配置角度模块的方法,角度应用程序犯规的生命周期允许和未知的提供程序错误将被抛出。只有提供者可以注入角度模块的配置方法