加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs select 自定义指令

发布时间:2020-12-17 08:18:44 所属栏目:安全 来源:网络整理
导读:由于很多下拉功能接口都一样,只有参数不同获取到不同的结果而已。为了避免在控制器中写一大堆重复的请求,所以把下拉功能做成指令。其中也碰到很多问题,好在有大神帮助下完成数据绑定的坑。 /** * select 选择框 * 根据字典选择 * paramsCatalog : 传入的

由于很多下拉功能接口都一样,只有参数不同获取到不同的结果而已。为了避免在控制器中写一大堆重复的请求,所以把下拉功能做成指令。其中也碰到很多问题,好在有大神帮助下完成数据绑定的坑。

/**
 * select选择框
 * 根据字典选择
 * paramsCatalog : 传入的参数
 * pholder : 选择说明
 * ngModel : 跟外部ng-model绑定
 * onSelect: 跟外部事件绑定---外部使用ng-change不生效,ng-click会触发两次。这样绑定只会触发一次
 * 在外部对应的自己定义的fondType方法中参数item就是这里的repeat的item对象
 * 页面使用<select-dictionary params-catalog="IT.SUPPORT_TYPE"  pholder="请选择申请事项" ng-model="bo.supportType" on-select="findType" required></select-dictionary>
 */
m.directive('selectDictionary',function(){
    return {
        restrict:'AE',scope:{
            paramsCatalog: '@',pholder:'@',ngModel:'=',onSelect:"&"
        },require:'ngModel',template:'<select ng-model=ngModel>'+
                '<option value="" disabled>--{{pholder}}--</option>'+
                '<option ng-repeat="item in data" ng-value="item.entryCode">{{item.name}}</option>'+
                '</select>',controller:['$scope','common.Svc','$filter',function(scope,comSvc,$filter){
            if(!scope.paramsCatalog)return;
            //获取数据字典接口
             comSvc.common.find({
                "catalog": scope.paramsCatalog,"catalogCode": scope.paramsCatalog
                },function (data,successful) {
                    if(successful){
                        scope.data = $filter('orderBy')(data,'orderWeight');
                        var dictionaryObj = {};
                        angular.forEach(data || [],function(v,i) {
                                //把里面的v.entryCode字段作为保存的key
                            dictionaryObj[v.entryCode] = v;
                        });
                        //这里把局部对象保存到scope对象下,以便下面的link函数调用。
                        scope.dictionaryObj = dictionaryObj;
                    }
            });
        }],link:function(scope,elem,attrs,ngModel){
            ngModel.$formatters.push(function (value) {
                scope.ngModelChange(value);
                return value;
            });
            scope.ngModelChange = function(value) {
                if(ngModel.$isEmpty(value)) return;
                scope.onSelect && scope.onSelect()(scope.dictionaryObj[value])
            };
        }
    }
});

实现目的→根据不同参数调用同一接口,获取到不同的内容。在页面上的ng-model能绑定下拉选中对象的key,在页面on-select方法中对应的页面控制器方法中的参数就是下拉选中的整个对象内容。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读