`

AngularJS单选、复选框

阅读更多

  在项目开发中,有应用到单选、复选框,对于Angular来讲,其实有很多实现方法。如下应用实例:

一.AngularJS radio单选实例

  在页面上有几个项目名称,每个名称前面都有一个checkbox,如果打上勾,则表示这个项目已经完成,如果没有打钩,则表示未完成。

  然后在下方设置一个输入框,用来输入新增加项目的名称,再下边是两个radio按钮,只能选择一个,用来选择新增肌的项目的完成情况。最后是一个提交按钮,表示添加一个新的项目。

        新增Name为Android,选择finished单选框,点击“Add a new item”按钮,就会出现在上面的列表中。

<!DOCTYPE html>
<html ng-app="todolist">
<head lang="en">
    <meta charset="UTF-8">
    <title>AngularJS单选多选</title>
</head>
<body>
<div ng-controller="TodolistController">
    <ul>
        <!--循环遍历作用域下的items,即($scope.items),并重复克隆这个HTML元素li-->
        <li ng-repeat="item in items">
            <!--当checkbox绑定的值为true时,页面中会打上对勾-->
            <input type="checkbox" ng-model="item.finished"><span ng-bind="item.name"></span>
        </li>
    </ul>
    <hr>
    <!--绑定作用域对象的一个数据模型name,这个那么变量随时获取输入框输入的内容-->
    Name:<input type="text" ng-model="name">

    <p></p>
    <label>
        <!--
        有两个radio标签,必须有相同的name才能实现二选一的效果
        通过ng-value里不同的值,实现选择不同radio有不同值。然后两个radio又绑定着相同的数据模型,这样就可以实现当选择不同的radio时,绑定的数据模型变量会有不同的值。
        -->
        <input type="radio" ng-value=true ng-model="state" name="selectState">finished
    </label>
    <label>
        <input type="radio" ng-value=false ng-model="state" name="selectState">unfinished
    </label>

    <!--这里是把这个数据模型显示出来,为了测试其值是否正确。可以省略掉-->
    <p>{{state}}</p>
    <!--当点击按后,执行一个函数-->
    <button type="button" ng-click="addItem()">Add a new item</button>
</div>
<script src="jquery-1.8.3.js"></script>
<script src="angular1.2.9.js"></script>
<script src="index01.js"></script>
</body>
</html>

index01.js

//先预定义几个项目的名称和完成的状态。
var items = [
	{name: 'Javascipt', finished: true},
	{name: 'AngularJS', finished: true},
	{name: 'NodeJS', finished: false},
	{name: 'MongoDB', finished: false}
];
//注册一个模块
var todolistModule = angular.module('todolist', []);
//注册一个控制器
todolistModule.controller('TodolistController', ['$scope', function ($scope) {
	//把外围的是对象数组的引用传递给模块作用域的数据模型items中
	$scope.items = items;
	//把输入框的内容初始化为空
	$scope.name = '';
	//给作用域添加函数方法
	$scope.addItem = function () {
		//因为将来要插入的都是对象,所以先定义一个空的对象
		var newItem = {};
		//分别把DOM中绑定的值赋给这个新定义对象的两个属性
		newItem.name = $scope.name;
		newItem.finished = $scope.state;
		//在数组的末尾追加对象元素
		items.push(newItem);
	};
}]);

 

二.AngularJS判断checkbox/复选框是否选中并实时显示

  做一个选择标签的功能,把一些标签展示给用户,用户选择自己喜欢的标签,就类似我们在购物网站看到的那种过滤标签似的,简单的效果如图所示:

index01.html

<!DOCTYPE html>
<html data-ng-app="App">
<head>
	<title>AngularJS单选多选按钮</title>
</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>
<script src="jquery-1.8.3.js"></script>
<script src="angular1.2.9.js"></script>
<script src="index02.js"></script>
</html>

  <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是scope 。我们可以传入 ,然后在函数里面通过event,然后在函数里面通过event.target 来获取到该元素。

index02.js

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;
    }
});

  updateSelection方法,这个方法会在html页面的checkbox被点击时调用,它通过$event变量来获取点击的dom元素,通过checkbox的当前状态来决定是add操作还是remove操作,然后调用updateSelected方法,更新数据。

  而isSelected方法,用来判断ID为id的checkbox是否被选中,然后传值给页面的ng-checked指令。

  不过,我总觉得这种实现方法,不太符合Angularjs以模型为中心的思想。

 

三.angularjs实现checkbox全选、反选

  有个总的checkbox 负责全选和反选,当每一项开头都选中checkbox的时候,上面的全选自动选上;当全选后,取消其中一项的checkbox,全选取消。

<!DOCTYPE html>
<html data-ng-app="myApp">
<head>
	<title>AngularJS checded</title>
</head>
<body>
    <div ng-controller="myController">
		<label for="flag">全选
			<input id="flag" type="checkbox" ng-model="select_all" ng-change="selectAll()">
		</label>
		<ul>
			<li ng-repeat="i in list">
				<input type="checkbox" ng-model="i.checked" ng-change="selectOne()">
				<span>{{i.id}}</span>
			</li>
		</ul>
	</div>
</body>
<script src="jquery-1.8.3.js"></script>
<script src="angular1.2.9.js"></script>
<script src="index03.js"></script>
</html>

index03.js

var app = angular.module('myApp',[]);
app.controller('myController', ['$scope', function ($scope) {
    $scope.list = [
        {'id': 101},
        {'id': 102},
        {'id': 103},
        {'id': 104},
        {'id': 105},
        {'id': 106},
        {'id': 107}
    ];
    $scope.checked = [];
    $scope.selectAll = function () {
        if($scope.select_all) {
            $scope.checked = [];
            angular.forEach($scope.list, function (i) {
                i.checked = true;
                $scope.checked.push(i.id);
            })
        }else {
            angular.forEach($scope.list, function (i) {
                i.checked = false;
                $scope.checked = [];
            })
        }
        console.log($scope.checked);
    };
    $scope.selectOne = function () {
        angular.forEach($scope.list , function (i) {
            var index = $scope.checked.indexOf(i.id);
            if(i.checked && index === -1) {
                $scope.checked.push(i.id);
            } else if (!i.checked && index !== -1){
                $scope.checked.splice(index, 1);
            };
        })

        if ($scope.list.length === $scope.checked.length) {
            $scope.select_all = true;
        } else {
            $scope.select_all = false;
        }
        console.log($scope.checked);
    }
}]);

  给数组里面每一个list 绑定checked 的属性。

 

四.利用ngValue

<!DOCTYPE html>
<html data-ng-app="valueExample">
<head>
	<title>AngularJS checded</title>
</head>
<body>
     <form ng-controller="ExampleController">
	   <h2>Which is your favorite?</h2>
		 <label ng-repeat="name in names" for="{{name}}">
			<input type="radio"
				  ng-model="my.favorite"
				  ng-value="name"
				  id="{{name}}"
				  name="favorite">
		   {{name}}
		 </label>
	   <div>You chose {{my.favorite}}</div>
	 </form>
</body>
<script src="jquery-1.8.3.js"></script>
<script src="angular1.2.9.js"></script>
<script src="index04.js"></script>
</html>

index04.js

angular.module('valueExample', [])
	.controller('ExampleController', ['$scope', function($scope) {
		$scope.names = ['pizza', 'unicorns', 'robots', 'jade'];
		$scope.my = { favorite: 'unicorns' };
	}]);

运行效果:



参考文章:

http://blog.csdn.net/lp_frank/article/details/44601283

http://www.cnblogs.com/CheeseZH/p/4517701.html

http://www.cnblogs.com/mayufo/p/5746788.html

https://code.angularjs.org/1.2.32/docs/api/ng/directive/ngValue

  • 大小: 6.6 KB
  • 大小: 8.1 KB
  • 大小: 10.6 KB
  • 大小: 2.8 KB
  • 大小: 5.3 KB
分享到:
评论

相关推荐

    在AngularJS应用中处理单选框和复选框

    在AngularJS应用中处理单选框(Radio Buttons)和复选框(Checkboxes)是前端开发中的常见任务,尤其在构建交互式用户界面时。AngularJS是一个强大的MVC(Model-View-Controller)框架,它提供了丰富的数据绑定和...

    AngularJS单选框及多选框实现双向动态绑定.docx

    这里,如果乒乓球的复选框被选中,$scope.person.like.pingpong将为true,反之为false。同理,对于足球和篮球。 四、完整示例 以下是一个完整的HTML示例,包含了上述单选框和多选框的双向绑定: ```html &lt;!DOCTYPE...

    使用AngularJS处理单选框和复选框的简单方法

    在AngularJS中,处理单选框(radio buttons)和复选框(checkboxes)是非常直观且高效的。AngularJS的核心特性之一就是双向数据绑定,这使得表单元素与应用程序的数据模型之间能够实时同步,大大简化了表单管理和...

    AngularJS Admin Dashboard Theme

    自定义单选按钮和复选框 定价表页面 锁定屏幕和登录页面 404错误页面 500错误页面 集成WYSIWYG编辑器(CKEditor) 邮箱 日历 时间表 搜索结果 清单 用户配置文件 自动保存用户设置 自定义为垂直滚动条滚动的内容...

    最新AngularJS开发宝典视频教程 后盾网AngularJS培训视频教程 后盾网.txt

    ├最新AngularJS开发宝典—第010讲 实例讲解angular操作checkbox复选框.mp4 ├最新AngularJS开发宝典—第011讲 实例讲解angular操作select列表框.mp4 ├最新AngularJS开发宝典—第012讲 函数使用方法大小写转换与...

    前端项目-myforce-angularjs-dropdown-multiselect.zip

    5. **可配置属性**:可以设置各种配置参数,比如是否显示复选框、是否开启搜索、默认选中项等,以满足不同的应用场景。 在`angularjs-dropdown-multiselect-master`文件夹中,我们可以预期找到以下几个关键文件: ...

    AngularJS入门教程之ng-checked 指令详解

    ng-checked指令是用于在AngularJS中动态控制复选框(checkbox)或单选按钮(radio)的选中状态。当你需要根据数据模型(model)中某个变量的真值(true)或假值(false)来设置元素的checked属性时,ng-checked就显得非常有用...

    AngularJS ng-value 指令-AngularJS 实例.zip

    ng-model通常用于文本输入、复选框、单选按钮等,它会捕获用户输入并更新模型。而ng-value则更倾向于设置输入元素的初始值,不涉及用户的交互变化。 4. **应用实例** 在实际开发中,ng-value常用于预填充表单字段...

    angular框架实现全选与单选chekbox的自定义

    在Angular框架中,实现全选与单选复选框(checkbox)的自定义功能是一项常见的需求,这通常涉及到数据绑定、事件监听以及逻辑控制。在本文中,我们将深入探讨如何在Angular环境中创建这样的功能。 首先,我们需要...

    ShopCartSelectAll

    在IT行业中,"ShopCartSelectAll"这个主题通常涉及到电商应用或者购物车系统中的复选框选择功能。在这个场景下,用户可以通过点击不同的复选框来选择或取消选择商品,以便进行购买操作。以下是关于这一功能实现的...

    基于AngularJS实现表单验证功能

    复选框(checkbox)的值在AngularJS中表现为 true 或 false。使用 ng-model 指令可以绑定复选框,获取用户是否勾选了复选框的状态。这在表单中用来表示简单的二选一问题或多项选择问题非常有效。 实现AngularJS表单...

    Angularjs 制作购物车功能实例代码

    `allOrcan`和`oneCheck`指令则用于处理全选和单选操作,它们会根据复选框的状态来更新商品的选择状态,并触发总价的更新。 此示例代码中还包含了一段用于引入jQuery和AngularJS的HTML代码。这是因为示例的某些操作...

    CSS框架与JS框架结合

    3. 表单:预定义的输入框、单选按钮、复选框、表单控件的样式。 4. 按钮:多种颜色和大小的按钮样式。 5. 导航组件:菜单、面包屑、分页、导航条、标签页和下拉菜单。 6. 辅助类:帮助创建响应式布局和间距的实用...

    jquery 常用方法

    在本篇文章中,我们将深入探讨jQuery的一些常见方法,这些方法对于前端开发人员来说非常实用,包括根据value选中单选框、复选框,以及操作select标签等功能。** 1. **选择器:** jQuery 的核心在于它的选择器,它...

    AngularJS基础 ng-disabled 指令详解及简单示例

    在AngularJS中,`ng-disabled`是一个非常有用的指令,它允许动态地禁用或启用HTML表单中的元素,如输入框、单选按钮、复选框、选择列表等。这个指令是基于AngularJS的数据绑定机制工作的,使得我们可以根据应用程序...

    angular-ui:AngularUI 用纯 AngularJS 编写的 Bootstrap 组件的所有示例

    有两个指令可以使一组按钮的行为类似于一组复选框、单选按钮或可以取消选中单选按钮的混合体。 旋转木马 Carousel 创建一个类似于 bootstrap 图像轮播的轮播。 轮播还以滑动的形式提供对触摸屏设备的支持。 要启用...

    jQuery表单元素美化插件jqtransform.zip

    这个插件能够将传统的、样式单一的表单元素,如文本输入框(text inputs)、复选框(checkboxes)、单选按钮(radios)以及下拉选择框(selects),转化为更为美观且具有现代感的设计。jqtransform的目标是提升网页...

Global site tag (gtag.js) - Google Analytics