目的
因为我的一个angularjs fruit-angular 项目要用的关系,而我又不想用bootstrap或者什么消息通知库之类,所以自己写了个。
预览

思路
新建个service 数据依附在$rootScope 上,之后在新建个指令 ,再把指令放在根html上。
代码
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 
 | var app = angular.module('xxx', []);
 
 
 app.factory('alertService', ['$rootScope', '$timeout', function($rootScope, $timeout) {
 var alertService = {};
 $rootScope.alerts = [];
 alertService.closeAlert = function(alert) {
 alertService.closeAlertIdx($rootScope.alerts.indexOf(alert));
 };
 
 alertService.closeAlertIdx = function(index) {
 $rootScope.alerts.splice(index, 1);
 };
 
 alertService.add = function(msg) {
 var tmp = {
 msg: msg,
 close: function() { alertService.closeAlert(this) }
 }
 $rootScope.alerts.push(tmp);
 $timeout(function() {
 $rootScope.alerts.shift();
 }, 2500);
 };
 return alertService;
 }]);
 
 | 
上述代码中,我给 $rootScope 添加了alerts属性,是一个数组,用来存储消息。
之后给 alertService 服务添加了几个方法,分别用来添加消息,关闭/删除消息,以及设定定时器,即2.5秒后自动删除第一条消息。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | 
 
 app.directive('myAlert', function() {
 return {
 restrice: 'ECMA',
 replace: true,
 scope: {
 myData: '='
 },
 templateUrl: 'template/alert.html'
 };
 });
 
 | 
上述代码,我添加个指令,名字为myAlert.
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | //template/alert.html
 
 <div style="position: fixed;z-index: 70;top: 0.2rem;">
 <div ng-repeat="item in myData" style="position: relative;width:6rem;min-height: 1rem;color: #0b9058;;border-radius:0 0.2rem 0.2rem 0;margin-bottom: 0.3rem;padding:0.2rem 0.6rem 0.2rem 0.2rem;background-color:rgba(252,253,253,0.7);">
 <p style="font-size: 0.4rem;">{{item.msg}}</p>
 <span  ng-click="item.close()" style="position: absolute;right: -0.1rem;top:-0.1rem;color:#fcfdfd;background-color: #0b9058;border-radius: 50%;width: 0.5rem;height: 0.5rem;text-align: center;line-height: 0.5rem;cursor: pointer;font-size: 0.3rem;">×</span>
 </div>
 </div>
 
 
 //index.html
 
 <my-alert my-data="alerts"></my-alert>
 
 | 
上述代码,我添加了之前指令对应的模版文件,这里用了行内样式。之后在index.html里面引入指令。