1. 定义一个弹出框的服务:alert_box
  2.  
  3. defiine(["app"],function(mainapp){
  4. mainapp.controller('ModalInstanceCtrl',[ "$scope","$uibModalInstance","items",function ($scope, $uibModalInstance, items) {
  5. $scope.items = items;//来自服务的resolve
  6. $scope.selected = {
  7. item: $scope.items[0]
  8. };
  9. //对应于服务then的第一个函数
  10. $scope.ok = function () {//点击”确定“按钮
  11. $uibModalInstance.close($scope.selected.item);
  12. };
  13. //对应于then的第二个服务
  14. $scope.cancel = function () {//点击”取消“按钮
  15. $uibModalInstance.dismiss('cancel');
  16. };
  17. })];
  18.  
  19. mainapp.factory("alert_box",["$uibModal","$log",function($uibModal,$log){
  20. var alert_box={};
  21. alert_box.change_team(){
  22. var items=["测试1""测试2","测试3"];
  23. var modalInstance=$uibModal.open({
  24. animation:true,
  25. templateUrl:"js/service/myModal/modal_alert.html",
  26. controller:"ModalInstanceCtrl",
  27. size:"large",
  28. resolve:{//保证在js服务加载之前,先执行(注入一个items,用于将服务里面的数据传递到控制器)
  29. items:function(){
  30. return items;
  31. }
  32. }
  33. });
  34. modalInstance.result.then( //then的第一个函数对应ok(),第二个函数对应cancel()
  35. function(sel){console.log(sel)},
  36. function(){console.log(”用户取消操作“);}
  37. );
  38. }
  39. return alert_box;
  40. }]);
  41. });

  

弹出框服务的使用:(我这里是在一个指令里面调用的)

  1. define(["app","js/service/myModel/model_alert"],function(mainapp){//引入服务文件
  2. mainapp.directive('myheader',[function(){
  3. return{
  4. replace:true,
  5. templateUrl:"directive_tpls/header.html",//指令的模版页面
  6. controller:["$scope","alert_box",function($scope,alert_box){
  7. .......///
  8. 其他的业务逻辑神略
  9. .......///
  10. $scope.openmodel=function(){
  11. alert_box.change_team();//通过服务调用
  12. }
  13. }]
  14. }
  15. }]);
  16. });

 然后就可以在指令的模版页面中调用

例如:<div ng-click="openmodal()"></div>

以上的封装似乎还是来的简单,下面再来一次进阶封装

1)还是定义一个服务

  1. define(['app','js/service/myModal/modal_ctrl'],function(mainapp){
  2. mainapp.factory('alert_box',['$uibModal','$log',function($uibModal,$log){
  3. var alert_box={};
  4. alert_box.open_modal=function(obj){
  5. var items=obj.info;
  6. return $uibModal.open({
  7. animate:obj.animate,
  8. templateUrl:obj.tpl_url,
  9. controller:obj.self_ctrl,
  10. size:obj.size,
  11. resolve:{
  12. items:function(){
  13. return items;//这个参数可以在弹出框控制器中注入,用于页面控制器向弹出框控制器传参数
  14. }
  15. }
  16. })
  17. }
  18. }]);
  19. });

2)modal_ctrl,我这里是将所有的弹出框控制器,集中在这里(遍历管理),当然你也可以直接写在上面的服务中

  js/service/myModal/modal_ctrl

  1. define(['app',
  2. "js/service/addApplicant/checkbox_add_applicant",
  3. 'js/service/choiceInventors/choice_add_inventors',
  4. 'js/service/alertModal/cofirm'
  5. ],function(mainapp){
  6. mainapp.registerController("modal_ctrl",[function(){
  7.  
  8. }]);
  9. });

3)定义弹出框Ctrl,用于弹出框模版的数据交互处理

  1. define(['app'],function(mainapp){
  2. mainapp.registerController("checkboxAddInventors",['$uibModalInstance','$scope','items',function($uibModalInstance,$scope){
  3. /*
  4. 给页面确定,取消按钮两个事件(通过这两个方法可以将数据信息传递给服务
  5. */
  6. $scope.sure=function(){
  7. $uibModalInstance.close("点击确定按钮");
  8. }
  9. $scope.cancel=function(){
  10. $uibModalInstance.dismiss("点击取消按钮");
  11. }
  12. }]);
  13.  
  14. });

4)在这里省略弹出框模版了:js/service/choiceInventors/checkbox_add_Invertors.html

5)在页面控制器使用弹出框服务

  1. define(['app'
  2. ,'js/service/modal_alert'
  3. ],function(mainapp){
  4. mainapp.registerCtroller("addCtrl",['$scope','alert_modal',function($scope,alert_modal){
  5. /*
  6. 给他一个触发事件
  7. */
  8. $scope.open=function(){
  9. alert_box.open_modal({
  10. tpl_url:'js/service/choiceInventors/checkbox_add_Invertors.html',
  11. self_ctrl:'checkboxAddInvertors',
  12. size:870,
  13. animate:true
  14.  
  15. }).then(function(res){//点击确定按钮的回调函数
  16.  
  17. },function(res){//点击取消的回调函数
  18.  
  19. });
  20. }
  21.  
  22. }]);
  23.  
  24. });  

  页面控制器-------------------resolve:{   }-------------------->弹出框模版控制器

弹出框控制器------------回调函数------------------------------>页面控制器

注意:使用的版本

在自定义服务时,是不能注入$scope的

http://angular-ui.github.io/bootstrap/versioned-docs/1.3.1/#/modal  

angular-ui-bootstrap的弹出框定义成一个服务的实践(二)的更多相关文章

  1. 将angular-ui-bootstrap的弹出框定义成一个服务的实践

    定义一个弹出框的服务:alert_boxdefiine(["app"],function(mainapp){ mainapp.controller('ModalInstanceCt ...

  2. Bootstrap:弹出框和提示框效果以及代码展示

    前言:对于Web开发人员,弹出框和提示框的使用肯定不会陌生,比如常见的表格新增和编辑功能,一般常见的主要有两种处理方式:行内编辑和弹出框编辑.在增加用户体验方面,弹出框和提示框起着重要的作用,如果你的 ...

  3. JS组件Bootstrap实现弹出框和提示框效果代码

    这篇文章主要介绍了JS组件Bootstrap实现弹出框和提示框效果代码,对弹出框和提示框感兴趣的小伙伴们可以参考一下 前言:对于Web开发人员,弹出框和提示框的使用肯定不会陌生,比如常见的表格新增和编 ...

  4. Bootstrap模态弹出框

    前面的话 在 Bootstrap 框架中把模态弹出框统一称为 Modal.这种弹出框效果在大多数 Web 网站的交互中都可见.比如点击一个按钮弹出一个框,弹出的框可能是一段文件描述,也可能带有按钮操作 ...

  5. Bootboxjs快速制作Bootstrap的弹出框效果

    Bootboxjs是一个简单的js库,简单快捷帮你制作一个Bootstrap的弹出框效果. 一.简介 bootbox.js是一个小的JavaScript库,它帮助您在使用bootstrap框架的时候快 ...

  6. [Bootstrap]modal弹出框

    写在前面 在实际开发中,为了友好,更需要一种美观的弹出框,js原生的alert,很难满足需求.这里推荐一个bootstrap的弹出框. 一个例子 先看效果吧 代码: <!DOCTYPE html ...

  7. Bootstrap实现弹出框和提示框效果代码

    一.Bootstrap弹出框使用过JQuery UI应该知道,它里面有一个dialog的弹出框组件,功能也很丰富.与jQuery UI的dialog类似,Bootstrap里面也内置了弹出框组件.打开 ...

  8. Bootstrap popover弹出框

    popover被挤压.遮挡的问题: 弹出框显示的时候如果贴近一个列的边沿,就会很窄或被遮挡,解决起来很简单,只需在初始化的时候添加一个container属性就可以了: $(function (){ $ ...

  9. 自定义Bootstrap样式弹出框

    最近做的一些功能需要用到Bootstrap,然而原来的系统并没有引入Bootstrap,为了新写的控件能够应用于老的页面,又不需要在老的页面上引入全套的Bootstrap文件决定写一个模仿Bootst ...

随机推荐

  1. ngnix配置自解

    全局配置 user [user] [group]; #只有被设置为用户或用户组的成员才有nginx的启动权限.(#user nobody nobody <=> user nobody no ...

  2. 5G信令(就是用户身份信息)风暴——就是客户端通过公钥加密的消息(携带手机IMSI号)发给服务端,服务器需用私钥解密,这个解密比较消耗资源,如果短时间大量请求到来就会触发信令风暴

    信令:手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络. 如果每个设备的每条消息都需要单独认证,则网络侧安全信令的验证需 ...

  3. 使用XMLHttpRequest对象完成原生的AJAX请求

    1.大家眼中的Ajax 说到Ajax,只要有过前端开发经验的童鞋一定都不陌生,大都知道它就是一种与后端之间的通信技术,通过这个神奇的家伙,我们不用像传统表单那样填完信息一点提交就呼啦呼啦跳转了.Aja ...

  4. bzoj1800

    题解: 暴力枚举,然后判断是否是矩形 代码: #include<iostream> #include<cstdio> using namespace std; ],dis[]; ...

  5. 内存保护机制及绕过方法——利用Ret2Libc绕过DEP之VirtualProtect函数

    利用Ret2Libc绕过DEP之VirtualProtect函数 ⑴.  原理分析: i.相关概念: VirtualProtect()函数: BOOL WINAPI VirtualProtect( _ ...

  6. eureka -2 - 重要配置

    Server 端配置 eureka.client.registerWithEureka :是否将自己注册到Eureka Server,默认是true,如果是单节点部署,切是server端,则设置成fa ...

  7. 关于Qt中使用线程的时候函数具体在哪个线程中运行的问题

    在子线程中,run函数中以及其中调用的都在单独的子线程里面运行,但是其他的类似构造函数之流都是在主线程里面运行的,不要搞混了

  8. php 请求url获取状态码

    function get_http_code($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); //设置URL c ...

  9. Js 日期选择,可以的一个页面中重复使用本JS日历,兼容IE及火狐等主流浏览器,而且界面简洁、美观,操作体验也不错。

    <html> <head> <title>Js日期选择器并自动加入到输入框中</title> <meta http-equiv="con ...

  10. asp.net button浏览器端事件和服务器端事件

    OnClientClick:触发浏览器端的响应,OnClick触发服务器端响应; 在服务器aspx.cs脚本中设置按钮属性: this.btnTest.Attributes["OnClick ...