美文网首页
ngDialog最佳实践

ngDialog最佳实践

作者: 卡卡卡卡颂 | 来源:发表于2017-04-02 20:38 被阅读0次

    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 这里再调用新建对应 对接口 所在的服务,继续后续处理
               
            })
        }
    }
    

    相关文章

      网友评论

          本文标题:ngDialog最佳实践

          本文链接:https://www.haomeiwen.com/subject/qfagottx.html