基于ionic的自定义指令----选择框

前提:学习视频连接http://www.imooc.com/video/3085
功能:

  • 自定义选择框弹出样式
  • 支持单选按钮和多选按钮的形式
  • data:输入的数据
  • result:返回结果
  • type:[“checkbox”,”radio”]
    代码如下:
html:
<div class="item" >
    <span class="input-label">风格:{{search.style}}</span>
    <k-select data="{{chest.styleList}}" type="checkbox" result ="search.style"></k-select>
</div>
css:
/**弹出窗popup 可y向滚动 无titlecss*/
.team-popup .popup-head{
    display: none;
}
.team-popup .popup{
    padding: 0;
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border-radius:5px;
}
.team-popup .popup-body{
    padding: 0;
    overflow-y:scroll;
}
/*自定义kmdSelect*/
.kmd-select {
    position: relative;
    height: 28px;
    width: 100%;
    border: 1px solid #bdbdbd;
    background-color: #f8f8f8;
    font-size: 14px;
    line-height: 26px;
    padding-left: 6px;
}
.kmd-select img{
    position: absolute;
    height: 16px;
    top: 6px;
    right: 5px;
    width: 8px;
}
.kmd-checkbox{
    border: 0;
    padding-left: 20px;
}
.kmd-checkbox input{
    height: 22px;
    width: 22px;
    float: left;
}
.kmd-checkbox div{
    float: left;
    height: 22px;
    padding-left: 16px;
    font-size: 17px;
    line-height: 22px;
}
.kmd-but{
    padding:0 !important;
}
.kmd-but button{
    padding: 0;
    width: 50%;
    background-color:white;
    color:black;
}
.kmd-but button + button{
    color:#4b9efa;
}
js:
.directive('kSelect',function($ionicPopup,$rootScope){
    var template = {
        checkbox:
        '<div class="item kmd-checkbox" ng-repeat="item in tempList">' +
            '<input type="checkbox" ng-checked="isChecked(item)" ng-click="updateSelection($event,item)">' +
            '<div>{{item.name}}</div>' +
        '</div>' +
        '<div class="item kmd-but">' +
            '<button class=\'button\' ng-click=\'cancel()\' >取消</button>' +
            '<button class=\'button\' ng-click=\'submit()\' >确认</button>' +
        '</div>',
        radio:
            '<div class="item kmd-checkbox" ng-repeat="item in tempList">' +
                '<input type="radio" ng-checked="isChecked(item)" ng-click="updateSelection($event,item)">' +
                '<div>{{item.name}}</div>' +
            '</div>' +
            '<div class="item kmd-but">' +
                '<button class=\'button\' ng-click=\'cancel()\' >取消</button>' +
                '<button class=\'button\' ng-click=\'submit()\' >确认</button>' +
            '</div>'
    } ;
    return {
        restrict:'AE',
        replace:true,
        scope:{
            test:'&',
            result:'='
        },
        template:'<div class="kmd-select"  ng-click="show()" >' +
        '{{showData}}' +
        '<img ng-src="./img/home/unfold.png">' +
        '</div>',
        link:function(scope,element,attr){
            scope.showData ='--选择--';
            var data = JSON.parse(attr.data);
            var temp =  template[attr.type];
            scope.show = function(){
                scope.tempList = data;
                scope.myPopupDetail = $ionicPopup.show({
                    cssClass: 'team-popup',
                    template: temp,
                    scope: scope
                });
            };
            //取消
            scope.cancel = function(){
                scope.myPopupDetail.close();
            };
            //确认
            scope.submit = function(){
                var d = scope.selected.join(',');
                scope.showData = d;
                scope.result = d;
                scope.myPopupDetail.close();
            };
            //数据处理
            scope.selected = [] ;
            scope.isChecked = function(item){
                return scope.selected.indexOf(item.name) >= 0 ;
            } ;
            scope.updateSelection = function($event,item){
                var checkbox = $event.target ;
                var checked = checkbox.checked ;
                if(checked){
                    scope.selected.push(item.name) ;
                }else{
                    var idx = scope.selected.indexOf(item.name) ;
                    scope.selected.splice(idx,1) ;
                }
            };


        }
    }
})

遇到的坑:

  • label标签中,不支持ng-click事件

页面展示:
展示图片

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值