AngularJS 全局消息通告 service

2013-10-15 22:24

原文 简体 繁體

14,081 次围观

在 AngularJS 中,Controller 之间可以共用的代码我们通常抽出来写成一个 Service。全局 Alert 消息系统就是一个很好的例子,比如“用户注册成功”、“添加商品成功”,每个 Controller 都有机会发出通告,这一部分功能应该写成独立模块。

Angular-UI Bootstrap 项目提供了一系列的模块,将 Bootstrap 中的 component 转换为原生的 Angular directives,如果你正在同时使用 Bootstrap 和 AngularJS,那么强烈建议你使用它。

在 Angular-UI Bootstrap 的文档里,有下面的例子来创建一个 alert:

View:

<div ng-controller="AlertDemoCtrl"><alert ng-repeat="alert in alerts" type="alert.type" close="closeAlert($index)">{{alert.msg}}</alert><button class='btn' ng-click="addAlert()">Add Alert</button>
</div>

Controller:

function AlertDemoCtrl($scope) {$scope.alerts = [{ type: 'error', msg: 'Oh snap! Change a few things up and try submitting again.' }, { type: 'success', msg: 'Well done! You successfully read this important alert message.' }];$scope.addAlert = function() {$scope.alerts.push({msg: "Another alert!"});};$scope.closeAlert = function(index) {$scope.alerts.splice(index, 1);};
}

假如说我们想要从很多不同的 Controller 发出 alert,那么像上面那样写就会导致跨 Controller 地调用函数,这属于 bad practice。我们将 alert 抽出来写成一个 Service ——

alertService:

'use strict';
/* services.js */// 别忘记将本 service 依赖注入到你的 app
var appServices = angular.module('myApp.services', []);appServices.factory('alertService', function($rootScope) {var alertService = {};// 创建一个全局的 alert 数组$rootScope.alerts = [];alertService.add = function(type, msg) {$rootScope.alerts.push({'type': type, 'msg': msg, 'close': function(){ alertService.closeAlert(this); }});};alertService.closeAlert = function(alert) {alertService.closeAlertIdx($rootScope.alerts.indexOf(alert));};alertService.closeAlertIdx = function(index) {$rootScope.alerts.splice(index, 1);};return alertService;
});

下面这段 HTML 可以放到你的 index.html 模板里,或者 include 到所有的页面。
View:

<alert ng-repeat="alert in alerts" type="alert.type" close="alert.close()"><span data-ng-bind-html="alert.msg"></span>
</alert>

最后,创建一个全局的 alert 就只需要在你的任何 Controller 里面调用 alertService.add() 即可,非常方便。

var UserCtrl = ['$scope', 'alertService',function(    $scope,   alertService) {alertService.add('warning', '这是一个警告消息!');alertService.add('error', "这是一个出错消息!");$scope.editProfile = function() {//...do somethingalertService.add('success', '<h4>成功!</h4> 你的个人资料已经修改。');}
}];

查看 Demo

alert angularjs相关推荐

  1. AngularJs的UI组件ui-Bootstrap分享(六)——Tabs

    tabs控件使用uib-tabset指令和uib-tab指令,效果是这样的: 1 <!DOCTYPE html> 2 <html ng-app="ui.bootstrap. ...

  2. ionic + cordova+angularJs 搭建的H5 App完整版总结

    为期半个月的项目实践开发,已完整告一段落,团队小组获得第一名,辛苦总算没有白费,想起有一天晚上,整个小组的人,联调到12点才从公司回去,真是心酸.这里总结一下,项目过程中遇到的问题 和感悟.哈哈,放张 ...

  3. [转]如果我有jQuery背景,我应该如何切换到AngularJS的思维模式?

    导言 stackoverflow上有一个人问了一个问题:如果我有jQuery背景,我应该如何切换到AngularJS的思维模式? 有一个回复非常经典,获得了两千多票. 为了让国内开发者也能领略到其中的 ...

  4. html分页自动加载数据库,AngularJS实现分页显示数据库信息

    接着第一篇<>AngularJS内建服务$location及其功能详解>,进行学习 Section 2:实现分页显示效果 那么再隐身一下,通过location的setter方法设置当 ...

  5. AngularJS中的指令全面解析(必看)

    出处: http://www.jb51.net/article/84665.htm 说到AngularJS,我们首先想到的大概也就是双向数据绑定和指令系统了,这两者也是AngularJS中最为吸引人的 ...

  6. 转: 理解AngularJS中的依赖注入

    理解AngularJS中的依赖注入 AngularJS中的依赖注入非常的有用,它同时也是我们能够轻松对组件进行测试的关键所在.在本文中我们将会解释AngularJS依赖注入系统是如何运行的. Prov ...

  7. AngularJS快速入门

    记得第一次听说AngularJS这项很赞的Web的前端技术,那时还是2014年,年中时我们我的一个大牛兄弟当时去面试时,被问到了是否熟悉该技术,当时他了解和使用的技术比较多.我们询问他面试情况时,他给 ...

  8. AngularJS 初始化加载流程

    一.AngularJS 初始化加载流程 1.浏览器载入HTML,然后把它解析成DOM. 2.浏览器载入angular.js脚本. 3.AngularJS等到DOMContentLoaded事件触发. ...

  9. 我的angularjs源码学习之旅2——依赖注入

    依赖注入起源于实现控制反转的典型框架Spring框架,用来削减计算机程序的耦合问题.简单来说,在定义方法的时候,方法所依赖的对象就被隐性的注入到该方法中,在方法中可以直接使用,而不需要在执行该函数的时 ...

最新文章

  1. python判断数据类型
  2. 定制CentOS (Redhat AS 5.1)安装盘
  3. MySQL多表与分组练习题及答案
  4. Calendar的那些神坑
  5. Oracle数据库-主键(primary key)、外键(foreign key)、候选键(candidate key)、超键(super key)和references总结...
  6. mysql 列 随机数_mysql mmp 某字段插入随机数!(说不定那天就忘记了,存下来再说)...
  7. 耳目一新!令人膜拜的牛人简历!厉害的攻城师啊
  8. Linux每个目录的介绍
  9. iOS开发之CALayer
  10. python 多核并行计算_手把手 | 嫌Python太慢?并行运算Process Pools三行代码给你4倍提速!...
  11. 手机上图片信息怎么拉一个矩形框_华为手机EMUI系统隐藏的10个功能,上手体验后,实用性无敌了...
  12. mysql列的数值型,字符型,日期型
  13. 开源10轴IMU PCB,基于MEMS传感器MPU6500-HMC5983-AK8975-BMP280-MS5611设计,适用于多轴无人机、平衡车、惯导入门
  14. python打印json_Python漂亮打印JSON
  15. C++ cout的使用,看这一篇就够了
  16. HTML教程(完整版).pdf,HTML教程详解(完整版).pdf
  17. 在墨刀中使用思维导图
  18. 抖音小程序入口和玩法,快速收割短视频红利!
  19. idea svn插件离线安装_idea离线安装lombock插件
  20. MySQL创建用户,更改密码

热门文章

  1. python 群发邮件数量限制_python群发邮件
  2. Spring切入点表达式
  3. 笔记本键盘进水几个按键失灵 还能修好么_苹果首台笔记本Mac Portable全拆卸,蒂姆·库克签名,无螺丝设计,机械键盘...
  4. NLP自然语言 - jieba分词库
  5. 洛谷 P1008 三连击
  6. NumberRunningTextView改良版
  7. 基于GIS、、geosever插件实现当地旅游资源网格化管理系统的架构
  8. JAVA JSP javaweb 火车订票系统(订票系统 火车票预订系统
  9. SSM-页面无法显示图片,样式等静态资源
  10. 一些程序中常出现的英文符号的读法