Angular.JS判断复选框checkbox是否选中并实时显示


Posted in Javascript onNovember 30, 2016

首先来看看简单的效果图,如下所示:

Angular.JS判断复选框checkbox是否选中并实时显示

看一下html代码:

<!DOCTYPE html>
<html data-ng-app="App">
<head>
 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script>
 <script src="script2.js"></script>
</head>
<body data-ng-controller="AddStyleCtrl">

 <div>Choose Tags</div> 
 <div>
  <div>You have choosen:</div>
  <hr>
  <label data-ng-repeat="selectedTag in selectedTags">
   (({{selectedTag}}))
  </label>
  <hr>
  <div data-ng-repeat="category in tagcategories">
   <div>{{ category.name }}</div>
   <div data-ng-repeat="tag in category.tags">
    <div>
     <input type="checkbox" id={{tag.id}} name="{{tag.name}}" ng-checked="isSelected(tag.id)" ng-click="updateSelection($event,tag.id)">
     {{ tag.name }}
    </div>
   </div>
   <hr>
  </div>
 </div>

<pre>{{selected|json}}</pre>
<pre>{{selectedTags|json}}</pre>

</body>
</html>

line2 定义了AngularJS App;

line4 引入angularjs脚本;

line5 引入自己写的script2.js脚本;

line7 指定控制器AddStyleCtrl

line13-15 实时显示已选标签给用户看;

line17-line26 使用双重循环列出数据库(本例中就存储在了controller的一个对象里)中的数据;

line21的这行代码作用可大了:<input type="checkbox" id={{tag.id}} name="{{tag.name}}" ng-checked="isSelected(tag.id)" ng-click="updateSelection($event,tag.id)">

存储了tag的id,name,利用isSelected(tag.id)来判断是否被checked,点击时候调用updateSelection($event,tag.id)方法;

如果想 ng-click 触发的函数里获取到该触发该函数的元素不能直接传入 this ,而需要传入 event。因为在Angularjs里面,这个地方的this是event。因为在Angularjs里面,这个地方的this是scope 。我们可以传入 event,然后在函数里面通过event,然后在函数里面通过event.target 来获取到该元素。

line29-30 是测试时候给自己看的,可以看到selected数组和selectedTags数组中的内容;

然后看看AngularJS代码:(script2.js)

/**
 * Created by zh on 20/05/15.
 */
// Code goes here

var iApp = angular.module("App", []);



iApp.controller('AddStyleCtrl', function($scope)
{
 $scope.tagcategories = [
  {
   id: 1,
   name: 'Color',
   tags: [
    {
     id:1,
     name:'color1'
    },
    {
     id:2,
     name:'color2'
    },
    {
     id:3,
     name:'color3'
    },
    {
     id:4,
     name:'color4'
    },
   ]
  },
  {
   id:2,
   name:'Cat',
   tags:[
    {
     id:5,
     name:'cat1'
    },
    {
     id:6,
     name:'cat2'
    },
   ]
  },
  {
   id:3,
   name:'Scenario',
   tags:[
    {
     id:7,
     name:'Home'
    },
    {
     id:8,
     name:'Work'
    },
   ]
  }
 ];

 $scope.selected = [];
 $scope.selectedTags = [];

 var updateSelected = function(action,id,name){
  if(action == 'add' && $scope.selected.indexOf(id) == -1){
   $scope.selected.push(id);
   $scope.selectedTags.push(name);
  }
  if(action == 'remove' && $scope.selected.indexOf(id)!=-1){
   var idx = $scope.selected.indexOf(id);
   $scope.selected.splice(idx,1);
   $scope.selectedTags.splice(idx,1);
  }
 }

 $scope.updateSelection = function($event, id){
  var checkbox = $event.target;
  var action = (checkbox.checked?'add':'remove');
  updateSelected(action,id,checkbox.name);
 }

 $scope.isSelected = function(id){
  return $scope.selected.indexOf(id)>=0;
 }
});

line6 定义了angular app;

line10 定义了控制器AddStyleCtrl;

line12-63 定义了 标签对象

line64,66 声明了$scope中的两个数组对象(可以合并为1个),分别用来存储tag的id和name;

line68-78 定义了updateSelected方法,这个方法会被updateSelection调用;

line69-72:如果add操作且 ‘数组[id]' 元素不存在,向数组中添加数据(id,name);

line73-77:如果remove操作且‘数组[id]' 元素存在,从数组中删除数据(id,name);

line80-84定义了updateSelection方法,这个方法会在html页面的checkbox被点击时调用;

line81通过$event变量来获取点击的dom元素;

line82通过checkbox的当前状态来决定是add操作还是remove操作;

line83调用updateSelected方法,更新数据;

line86-88定义了isSelected方法,用来判断ID为id的checkbox是否被选中,然后传值给页面的ng-checked指令;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问欢迎大家留言交流。

作者: ZH奶酪——张贺
Q Q: 1203456195
邮箱: cheesezh@163.com
出处: >http://www.cnblogs.com/CheeseZH/

Javascript 相关文章推荐
Javascript正则控制文本框只能输入整数或浮点数
Sep 02 Javascript
js实现星星打分效果的方法
Jul 05 Javascript
jquery预加载图片的方法
May 27 Javascript
jquery中checkbox使用方法简单实例演示
Nov 24 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
jquery获取easyui日期控件的值实现方法
Nov 09 Javascript
Angular2生命周期钩子函数的详细介绍
Jul 10 Javascript
详解Webpack多环境代码打包的方法
Aug 03 Javascript
Node.js+Express+Mysql 实现增删改查
Apr 03 Javascript
使用Vue-cli 中为单独页面设置背景图片铺满全屏
Jul 17 Javascript
Vue3配置axios跨域实现过程解析
Nov 25 Vue.js
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 #Javascript
浅析JavaScript中break、continue和return的区别
Nov 30 #Javascript
JavaScript的变量声明提升问题浅析(Hoisting)
Nov 30 #Javascript
浅析script标签中的defer与async属性
Nov 30 #Javascript
JavaScript 字符串常用操作小结(非常实用)
Nov 30 #Javascript
js实现表单提交后不重新刷新当前页面
Nov 30 #Javascript
html判断当前页面是否在iframe中的实例
Nov 30 #Javascript
You might like
虫族 Zerg 热键控制
2020/03/14 星际争霸
GD输出汉字的函数的分析
2006/10/09 PHP
phpfans留言版用到的install.php
2007/01/04 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php使用Swoole实现毫秒级定时任务的方法
2020/09/04 PHP
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
新手入门常用代码集锦
2007/01/11 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
2013/08/30 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
2014/08/13 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
第十篇BootStrap轮播插件使用详解
2016/06/21 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
React如何避免重渲染
2018/04/10 Javascript
JavaScript事件冒泡与事件捕获实例分析
2018/08/01 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
Python学习资料
2007/02/08 Python
python实现保存网页到本地示例
2014/03/16 Python
Python实现控制台输入密码的方法
2015/05/29 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
解决pytorch 交叉熵损失输出为负数的问题
2020/07/07 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
GWebs公司笔试题
2012/05/04 面试题
如何用JQuery进行表单验证
2013/05/29 面试题
简历中自我评价分享
2013/10/09 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js