ngDialog最佳实践

ngDialog是什么

ngDialog是一款ng1.*的第三方浮窗插件,其正确的使用方法可以说是MVVM思想的浓缩体现。

实现目标

  • 提供一个弹窗
  • 弹窗提供必要的模板,该模板(HTML结构)可复用
  • 对于具体业务逻辑(新增还是修改,在不同的controller中实现)

例子

  1. 首先我们定义一个打开操作弹窗的服务,或者在服务中定义一个打开弹窗的方法
//可以用来新增 的弹窗
function addDialog(data) {
  var defer=$q.defer();
  ngDialog.open({
      //模板地址
      templateUrl:'xxx.html',
      className: 'ngdialog-theme-default',
      width: 640,
      closeByDocument: false,
      showClose: true,
      //用来新增的ngDialog的controller
      controller: 'AddCtrl',
      //传入ngDialog controller的依赖
      resolve: {
          //依赖名为dep,依赖的对象为传入的参数  
          dep: function() {
            return data;
          }
      },
      /**
      * 关闭弹窗前的回调
      * 区分是点击关闭按钮 还是保存按钮,返回promise的不同状态
        */
      preCloseCallback: function(data) {
        if (data==='$closeButton') {
            defer.reject();
        } else {
            defer.resolve(data);
        }
      }
  })
  return defer.promise;
}
  1. 接下来定义新增的dialog的控制器
angular.module('app').controller('AddCtrl',AddCtrl);
AddCtrl.$inject=['$scope','dep','ngDialog'];
function AddCtrl($scope,dep,ngDialog) {
  
    initStatus();
    
    function initStatus() {
    
      /*取到依赖的数据,也就是调用addDialog服务时传入的参数  
      *浮窗中所有数据与$scope.data下的数据双向绑定
      * 所以可以通过传入的初始配置项改变模板中的数据(比如传入title字段 改变弹窗的title)
      */
      $scope.data={
          params:dep
      }
    }
    
    /**
    * 点击保存设置时触发
    * close的传参将传给preCloseCallback,
    * preCloseCallback再根据关闭窗口的类型(关闭还是保存)处理
    * 当为保存配置时,配置参数作为传参传给promise的resolve状态
    */
    $scope.submitForm=function() {
      ngDialog.close($scope.ngDialogId,$scope.data.params);
    }
}
  1. 在需要打开浮窗的控制器中调用addDialog服务,传入初始配置项
angular.module('app').controller('PermissionProjectCtrl',PermissionProjectCtrl);
PermissionProjectCtrl.$inject=['$scope','ngDialog','permissionService'];
function PermissionProjectCtrl($scope,ngDialog,permissionService) {
    
    $scope.createNewPermission=function() {
      
        //初始配置项
        var params={
            title:'新增项目权限',
            type:'project'
        }
        permissionService.addDialog(params).then(function(data) {
            //表单处理完成后 传出处理后的数据  data 这里再调用新建对应 对接口 所在的服务,继续后续处理
           
        })
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • AngularJS是什么?AngularJs(后面就简称ng了)是一个用于设计动态web应用的结构框架。首先,它是...
    200813阅读 1,679评论 0 3
  • http://blog.sina.com.cn/s/blog_537517170102w5vj.html 源地址 ...
    my木子阅读 801评论 0 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,963评论 2 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 【情】 友情是什么 就是见了想着再见,偶尔一见面 爱情是什么 就是见了想着再见,而且每天都想见面,并且频繁地见面 ...
    ShAvIn阅读 223评论 0 0