selects.js 5.6 KB

angular.module("zd/template/select.html",[]).run(["$templateCache", function($templateCache){
    "use strict";
    $templateCache.put("zd/template/select/selectList.html",
        "<div id='{{id}}' class='zd-select-layout'>" +
        "   <div class='btn  btn-select btn-primary' ng-click='showList()'>选择</div>" +
        "   <div  class='select-list-layout' ng-if='vm.showList'>" +
        "       <div class='select-list-layout-p'>" +
        "           <div class='select-set clearfix'>" +
        "               <input type='text' class='form-control' ng-model='vm.keyword'    autocomplete=\"off\"   placeholder=\"{{xnPlaceholder}}\" /> " +
/*        "               <div class='select-set-l'>" +

        "               </div>" +*/
/*        "               <div class='btn btn-cancel btn-default' ng-click='cancel()'>取消</div>" +*/
        "           </div>"+
        "          <div class='select-list'>"+
        "              <ul class='list-item' ng-show='!vm.isLoading && itemList.length>0'>"+
        "                   <li class='item clearfix' ng-repeat=\"item in itemList | filter:{name:vm.keyword} track by $index\" ng-click='selectItem(item,$event)' " +
        "                       ng-class='{\"item-active\":item.zdActive}'  ng-init='isShow=false'>{{item.name}}" +
        "                   </li> "+
        "              </ul>"+
        "              <div ng-show='vm.isLoading' class='select-tip'>正在搜索中...</div>"+
        "              <div ng-show='itemList.length==0 && !vm.isLoading' class='lookup-tip'>没有搜索到相关内容</div>"+
        "          </div>" +
        "          <div class='btn  btn-ok btn-primary' ng-class='{\"disabled\":!selectData.id}' ng-click='ok()'>选择</div>" +
        "          <div class='btn  btn-cancel btn-default'  ng-click='cancel()'>取消</div>" +
        "       </div>" +
        "  </div>"+
        "</div>"
    );
}]);

angular.module("zd.directive.select",["zd/template/select.html"])
    .directive("zdSelectList",["$timeout","$q",function($timeout,$q) {
        return {
            restrict :"EA",
            scope: {
                data : "=ngModel",
                searchKey:"@",
                searchVal:"@",
                placeholder : "@",
                callback:"&",
                method:"&"
            },
            templateUrl: "zd/template/select/selectList.html",
            replace: true,
            require: "^ngModel",
            link:function (scope, elements, attrs) {

                scope.itemList=[];
                var time = new Date().getTime();
                scope.id = "zdSelectList" + time;

                scope.vm={
                    isLoading:false,     //是否在查询
                    showList:false,     //显示选择框
                    keyword:""
                };
                /*选择值*/
                scope.selectData="";

                scope.xnPlaceholder=scope.placeholder||"请输入提示信息!";

                //获取列表数据
                function getList() {
                    scope.itemList=[];
                    var deferred  = $q.defer();
                    scope.vm.isLoading=true;
                    scope.method({data:{"deferred":deferred}});

                    deferred.promise.then(function (data) {
                        scope.vm.isLoading=false;
                        scope.itemList=data.itemList ||[];
                    });
                }

                //打开选择列表
                scope.showList=function () {
                    scope.vm.showList=!scope.vm.showList;
                    if(scope.vm.showList){
                        getList();
                        scope.selectData="";
                    }
                };
                
                //选择
                scope.selectItem=function (data,e) {
                    e.preventDefault();
                    e.stopPropagation();
                    angular.forEach(scope.itemList,function (item) {
                        if(data.id==item.id){
                            item.zdActive=true;
                        }else {
                            item.zdActive=false;
                        }
                    });
                    scope.selectData=angular.copy(data);
                };

                function doBlur() {
                    scope.vm.showList=false;
                }
               /*取消搜索*/
                scope.cancel=function () {
                    scope.selectData="";
                    doBlur();
                };

                //选择
                scope.ok=function () {
                    if(angular.isObject(scope.selectData)){
                        scope.data=scope.selectData.name;
                        if(scope.callback){
                            scope.callback({data:scope.selectData});
                        }
                        doBlur();
                    }
                };
                //已开鼠标 关闭
                var getPar = function(tar) {
                    if(tar.id==scope.id){
                        scope.count++;
                    }
                    if(tar.parentElement){
                        getPar(tar.parentElement);
                    }
                };
                angular.element(document).bind("click", function(e) {
                    scope.count = 0;
                    getPar(e.target);
                    if(scope.count == 0) {
                        scope.$apply(function(){
                            scope.vm.showList=false;
                            doBlur();
                        })
                    }
                });
            }
        }
    }]);