select directive

directive:

 webAppDirective.directive("mySelect",function(){
        return {
            restrict: 'AE',
            scope: {
                'list': '&data',
                "changeSelect":"&selectChange",
                "selectModel":"=selectModel"   /* 会自动更新,不需要手动赋值,但要配置 */
            },

            controller: function($scope, $element, $attrs) {
                $scope.list=$scope.list()
                $scope.list.map(function(item,index){
                    if(item[$attrs.value]==$scope.$parent[$attrs.selectModel]){
                        $scope.$parent[$attrs.selectModel]=item
                    }
                    if(item[$attrs.name]){
                        item.name=item[$attrs.name]
                        delete  item[$attrs.name]
                    }
                    if(item[$attrs.value]){
                        item.value=item[$attrs.value]
                        delete item[$attrs.value]
                    }
                })
                $scope.done=function(index){
                    var model=$scope.list[index]
                    $scope.hideSelect=true
                    $scope.$parent[$attrs.selectModel]=angular.copy(model)  //手动更新  不从$apply走,直接修改父级的$scope.$parent[$attrs.selectModel]
                                                                            //不需要再给本地scope.selectModel单独赋值,因为是双向绑定,
                                                                           // 被ng-repeat,对象中有$$hashkey标记,angular.copy格式化
                   $scope.changeSelect()

                }
            },


            template:'<div  class="al_dropDown"><br /> ' +
                '<span ng-mouseover="hideSelect=false" >' +
                '<span style="text-overflow: ellipsis;word-wrap: break-word;white-space: nowrap; padding-left: 0px;overflow: hidden;width: 100px;border: none">{{selectModel.name}}</span> <a></a></span>' +
                ' <ul ng-hide="hideSelect" ><li ng-click="done($index)"  ng-repeat=" i in list " >{{i.name}}</li> </ul> ' +
                '</div>'
        }
    })

HTML:

   <div my-select select-model="mm" select-change="changeSelect(mm.value)"  data='[{ id:1,text:"kitty"},{ id:2,text:"funny"},{ id:3,text:"asdfasdfasdf"}]' name="text" value="id"></div>

  

  

posted @ 2017-04-06 13:13  break_happy  Views(146)  Comments(0Edit  收藏  举报