ng-directive-选择数据
本文是用angularjs指令写的一个简易数据选择功能,其实就是两个下拉框,把两边的数据相互交换而已,这样的功能最早应该是用jquery写过,但移动端js框架angularjs如果还嵌套jquery来写效果,这样就显的没有可用性了,并且在前不久QQ讨论群里面也有人问题这样的功能用ng怎么实现,在这就顺便发上一篇吧,勿喷,界面如下:

思路分析:
1.单选或多选这左边的数据,左边选择的数据就移除变动到后面的选择框中,后面选择框的功能反过来也是一样的;
2.看起来这两个选择框的功能是一模一样的,没错这里关键的问题就在于这两个框之前必须保持的关系,因为复杂的业务界面通常有多个选择框,这样就必须要知道那两个框是对应的,这里使用的是插件Id来保持关系
代码:
功能主要分为两个方法,选择左边数据时候的处理方法和右边数据的处理方法如下:
var myTest = angular.module("myTest", []);
myTest.directive("selremove", function () {
return {
restrict: 'ECMA',
scope: {
getOpitems: '&',
id: '@id'
},
template: '<table>' +
'<tr>' +
'<td>' +
'<select id="{{id}}01" multiple ng-click="NextFun()" ng-options="option.name for option in data.opItems track by option.val" ng-model="data.selectedOption"></select>' +
'</td>' +
'<td>' +
'<select id="{{id}}02" multiple ng-click="PrevFun()" ng-options="option.name for option in data.selectedAllOption track by option.val" ng-model="data.selectedOption">' +
'</select>' +
'</td>' +
'</tr>' +
'</table>',
controller: function ($scope) {
$scope.data = {
opItems: $scope.getOpitems(),
selectedOption: [],
selectedAllOption: []
};
//右移
$scope.NextFun = function () {
console.log("NextFun");
var selOption = $scope.data.selectedOption; //使用的是自带的选择option
for (var i in selOption) {
var item = selOption[i];
for (var ii in $scope.data.opItems) {
var item01 = $scope.data.opItems[ii];
if (item01.val != item.val || !angular.isObject(item01)) { continue; }
//添加到最终选中框
// console.log("next:" + item01.val);
$scope.data.selectedAllOption.push(item01);
//移除opItems数据
$scope.data.opItems.splice(ii, );
break;
}
}
}
//左移
$scope.PrevFun = function () {
console.log("PrevFun");
var selOption = $scope.data.selectedOption;
for (var i in selOption) {
var item01 = selOption[i];
for (var ii in $scope.data.selectedAllOption) {
var item = $scope.data.selectedAllOption[ii];
// console.log(item01.val + "|" + item.val + "|" + ii);
if (item01.val != item.val || !angular.isObject(item)) { continue; }
//添加到原始集合
$scope.data.opItems.push(item);
//移除selectedAllOption数据
$scope.data.selectedAllOption.splice(ii, );
break;
}
}
}
}
}
});
myTest.controller("OpCtrl", function ($scope) {
$scope.OpItems = [
{
name: "苹果",
val: ""
},
{
name: "橘子",
val: ""
},
{
name: "番茄",
val: ""
},
{
name: "香蕉",
val: ""
},
{
name: "汽车",
val: ""
},
{
name: "作业",
val: ""
},
{
name: "工资",
val: ""
},
{
name: "游戏",
val: ""
},
{
name: "冲浪",
val: ""
}
];
});
上面使用的ng指令的规范,就不用说了,必须要按照ng规则来写指令,想说的是这段代码-ng-options="option.name for option in data.opItems track by option.val"使用了ng自带的数据展示方式,类似于for循环遍历数据;
上面的代码是封装了一个ng指令,然后在页面上只需要一句代码如:<selremove id="sel" get-opitems="OpItems"></selremove> 这样就能把两个选择框展示出来,功能实现;
这功能简单没有什么说的也没用到什么nb的技术,关键想强调的是ng的规范性,web界面效果实现起来的简单分析,勿喷。
效果的展示地址:http://7xn3fx.com1.z0.glb.clouddn.com/左右选择数据.html
ng-directive-选择数据的更多相关文章
- easyui 筛选数据及仅允许选择数据
先说需求,本地已缓存数据源,用户输入拼音码或编号,筛选数据作为新的数据源,然后通过键盘选择. 再说问题,easyui combogrid控件,在mode为local,也就是将数据源缓存在本地的情况下, ...
- pandas选择数据-【老鱼学pandas】
选择列 根据列名来选择某列的数据 import pandas as pd import numpy as np dates = pd.date_range("2017-01-08" ...
- Python 数据分析 - 索引和选择数据
loc,iloc,ix三者间的区别和联系 loc .loc is primarily label based, but may also be used with a boolean array. 就 ...
- Python+selenium之获取文本值和下拉框选择数据
Python+selenium之获取文本值和下拉框选择数据 一.结合实例进行描述 1. 实例如下所示: #新增标签操作 def func_labels(self): self.driver.find_ ...
- 【转】Pandas学习笔记(二)选择数据
Pandas学习笔记系列: Pandas学习笔记(一)基本介绍 Pandas学习笔记(二)选择数据 Pandas学习笔记(三)修改&添加值 Pandas学习笔记(四)处理丢失值 Pandas学 ...
- 关于【vue + element-ui Table的数据多选,多页选择数据回显,分页记录保存选中的数据】的优化
之前写的[vue + element-ui Table的数据多选,多页选择数据回显,分页记录保存选中的数据]这篇博客.功能虽然实现了相对应的功能.但是用起来很不爽.所以进行了优化. 备注:最近可能没时 ...
- pandas 学习 第14篇:索引和选择数据
数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...
- ng 监听数据的变化
$scope.$watch('监听的变量的名称',func) 在angularJs之所以能够实现绑定,是因为angularJS框架在背后为每一个模型数据添加了一个监听,与$watch其实是一个道理. ...
- angularJs中自定义directive的数据交互
首先放官方文档地址:https://docs.angularjs.org/guide/directive 就我对directive的粗浅理解,它一般用于独立Dom元素的封装,应用场合为控件重用和逻辑模 ...
- Pandas选择数据
1.简单筛选 >>> dates = pd.date_range(', periods=6) >>> df = pd.DataFrame(np.arange(24) ...
随机推荐
- 动画requestAnimationFrame
前言 在研究canvas的2D pixi.js库的时候,其动画的刷新都用requestAnimationFrame替代了setTimeout 或 setInterval 但是jQuery中还是采用了s ...
- Dapper.Contrib:GetAsync<T> only supports an entity with a [Key] or an [ExplicitKey] property
异常处理:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 原来Model是这样滴 修改后是这样滴 注意点:Model里面的Table和Key ...
- HTML5 progress和meter控件
在HTML5中,新增了progress和meter控件.progress控件为进度条控件,可表示任务的进度,如Windows系统中软件的安装.文件的复制等场景的进度.meter控件为计量条控件,表示某 ...
- IE的F12开发人员工具不显示问题
按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的缩略图上,右键-最大化,工具就全屏出现 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)
开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 任务调度系统界面 http: ...
- ls: 无法访问/usr/sbin/smartctl: 没有那个文件或目录
环境:RHEL6.5 + Oracle 11.2.0.4 RAC 在安装RAC时,检查时缺少包 cvuqdisk-1.0.9-1,oracle提供脚本修复安装. 但在执行时报错: [root@orad ...
- duang~免费的学习视频来啦:学霸君之全栈测试
学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...
- Hadoop的安装与设置(1)
在Ubuntu下安装与设置Hadoop的主要过程. 1. 创建Hadoop用户 创建一个用户,用户名为hadoop,在home下创建该用户的主目录,就不详细介绍了. 2. 安装Java环境 下载Lin ...
- NodeJS使用mysql
1.环境准备 手动添加数据库依赖: 在package.json的dependencies中新增, "mysql" : "latest", { "nam ...
- Android Bitmap 和 ByteArray的互相转换
Android Bitmap 和 ByteArray的互相转换 移动平台图像处理,需要将图像传给native处理,如何传递?将bitmap转换成一个 byte[] 方便传递也方便cpp代码直接处理图像 ...