angular js 使用了ng-repeat 实现单选及多选效果

作为最开始接触angular js ,单选效果还比较好实现,实现多选这一效果,在请教大神思路后,自己又思考,最终才做出来。逻辑性比较差。

1 、先来说一下单选。

单选实现起来,比较简单,分两步,一步是样式的实现,一步是给后台传值,即点击哪个按钮给后台传哪个值。总的来说有两种实现方式。

  可以通过 ng-repeat 本身带有的属性$index 。

样式的实现  :ng-class="{{ 'selectedActive':true}}[$index == index]"

功能的实现   : ng-click=''clickFun($index)"        js   $scope.clickFun = function(index){ $scope.index = index   }

2 说一下多选。

多选这个问题用前边代码页面来判断还是比较困难的。

angular js 无非两个理念,双向数据绑定能够实现最好,实现不了我们只能寄希望于js 代码来实现了。

多选的逻辑我也是问了大神,自己又理了半天,才弄明白。无非是我们建立一个数组,如果当前选中的元素在数组中,我们就把当前元素移出数组,如果数组中没有当前元素,我们就把选中的元素push到数组中。这样数组中存放的就是我们选中的多个元素。直接上代码。

for(var i = 0;i<Arr.length;i++){
if(Id==Arr[i]){       //id 为当前选中的id
flag = 1;
tell = i;   //定位当前元素下标,便于删除
break;
}
}
if(flag!=1){
tell = -1;
}

if(tell >= 0){
Arr.splice(tell,1); //元素存在从数组删除

}else{

Arr.push(id);   //不存在push进去

}

样式的实现:如果当前选中的元素在数组中,我们给它加相应的样式。这里不得不提ng-class 的用法了,常规的方法无非是keyvalue 的形式外加【】做判断条件,当然判断条件 现在就不能单纯用$index = index 来界定了,多选与$index无关,只能设定函数 ,返回true,false  来决定是否添加样式了。即ng-class="{{ 'selectedActive':true,‘  ’:false}}[colorActive(id)]"         $scope.colorActive= function(id) { 

for(var i = 0;i<Arr.length;i++){
if(Id==Arr[i]){       //id 为当前选中的id
return true;
}

}

}

习惯了元素单个操作,对ng-repeat 有种种不适应,从条件【】来判断就到这里。 

多选实现了,其中因为业务逻辑,有两个不能同时选中,那么又就需要在多选的基础上进行判断,如果为这两个元素,选其中一个,判断另外一个在不在数组中,存在就把这个元素移出数组,当前的push进去。不存在,直接push 进去,上代码

if(Id=="A"){
for(var i = 0;i<Arr.length;i++){
if(Arr[i]=="B"){
sign = i;  //标志位置
}
}
}
if(Id=="B"){
for(var i = 0;i<Arr.length;i++){
if(Arr[i]=="A"){
sign = i;
}
}
}

if(tell >= 0){
Arr.splice(tell,1);
}else{
for(var i=0;i<Arr.length;i++){
if(Arr[i]=="A"||Arr[i]=="B"){
if(sign!=-1){
Arr.splice(sign,1);
}
}
}
Arr.push(Id);
}



这样就实现了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值