AngularJS与单选框及多选框的双向动态绑定

举报
SHQ5785 发表于 2024/02/29 14:03:55 2024/02/29
【摘要】 赠人玫瑰,手留余香。若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉!      AngularJS 在 <input type="text" /> 中实现双向动态绑定十分简单,如下所示:      <input type="text" ng-model="topic.title" />      只需要用ng-model 与 $scope 中的属性对应,即实...
赠人玫瑰,手留余香。若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉!

      AngularJS 在 <input type="text" /> 中实现双向动态绑定十分简单,如下所示:

      <input type="text" ng-model="topic.title" />

      只需要用ng-model 与 $scope 中的属性对应,即实现了type=”text” 的双向动态绑定。当 <input type="radio" /> 及 <input type="checkbox" /> 时情况略有不同:

      1. <inputtype="radio" /> 

     <input type="radio" name="person-action" value="go_home" ng-model="person.action" />回家
      <input type="radio" name="person-action" value="go_to_school" ng-model="person.action"  />回学校

      通过 value 属性指定选中状态下对应的值,并通过 ng-model 将单选框与 $scope 中的属性对应,便实现了 type=”radio” 时的双向动态绑定。

      2. <input type="checkbox" /> 

   <input type="checkbox" ng-true-value="true" ng-false-value="false" ng-model="phone.play_sound" />铃声
   <input type="checkbox" ng-true-value="true" ng-false-value="false" ng-model="phone.play_vibrate" />震动
   <input type="checkbox" ng-true-value="true" ng-false-value="false" ng-model="phone.play_lights" />呼吸灯

     通过AngularJS 的内置指令 ng-true-value 和 ng-false-value ,指定多选框在选中和未选中状态下对应的值,再通过ng-model 将其与 $scope 中的属性对应,便实现了type=”checkbox” 的双向动态绑定。

      但是理想跟现实总是相差太多,在实际操作过程中还是出现了问题。应该是ng-repeat中scope作用域的问题。

     经过一番搜索、调试,自己终于将此问题解决了,效果图如下:

核心源码

js

var str = "";	// 原来存放选中的项
$scope.Selected = false;	//默认未选中
var choseArr=[];	// 定义数组用于存放前端显示
$scope.check = function(z,x){
console.log("HUY:");
console.log(z);
 
console.log("HUYU:");
console.log(x);
if (x == false) { 	// 选中
            str = str + z + ',';
        } else {
            str = str.replace(z + ',', ''); // 取消选中
        }
 
        choseArr = (str.substr(0,str.length-1)).split(',');
        
 	console.log("HY:");
 	console.log(choseArr);
 
 	$scope.number_request = choseArr.length;	// 前端显示所选数量
 	$scope.content_request = choseArr;	// 前端显示所选请求ID
};

Html

    	<tr ng-repeat="item in querydata">
    
    	<td ng-bind="$index+1">1</td>
        	<td><a ui-sref="#">{{item.postid}}</a></td>
         	<td>{{item.medname}}</td>  
         	<td>{{item.medfact}}</td> 
         	<td>{{item.medcnt}}</td>     
         	<td>{{item.remark}}</td>       
         	<td>{{item.tel}}</td>       
         	<td>{{item.post_time}}</td>
         	<td><input id={{item.postid}} type="checkbox" ng-model="Selected" ng-click="check(item.postid,Selected)" /></td>       
    	</tr>

参考文献:

在 AngularJS 应用中处理单选框和复选框 - OSCHINA - 中文开源技术交流社区

ZH奶酪:AngularJS判断checkbox/复选框是否选中并实时显示 - ZH奶酪 - 博客园

AngularJs 简单实现全选,多选操作-布布扣-bubuko.com

Angularjs中scope与rootscope区别及联系

scope是html和单个controller之间的桥梁,数据绑定就靠他了。rootscope是各个controller中scope的桥梁。用rootscope定义的值,可以在各个controller中使用。下面用实例详细的说明一下。

1.js代码

phonecatApp.controller('TestCtrl',['$scope','$rootScope',  
    function($scope,$rootScope) {  
        $rootScope.name = 'this is test';  
    }  
]);  
phonecatApp.controller('Test111Ctrl',['$scope','$rootScope',  
    function($scope,$rootScope) {  
        $scope.name = $rootScope.name;  
    }  
]);

2.html代码

<div ng-controller="TestCtrl">  
    I  set the global variable.<strong>{{$root.name}}</strong>  
</div>  
<div ng-controller="Test111Ctrl">  
    1,get global variable .<strong>{{name}}</strong><br>  
    2,get global variable .<strong>{{$root.name}}</strong>  
</div>

3.显示结果

I set the global variable.this is test  

1,get global variable .this is test  

2,get global variable .this is test  

      由结果可以看出来,$rootScope.name设置的变量,在所有controller里面都是可以直接用{{$root.name}}来显示的,很强大。那当然也可以赋值给scope.

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。