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) ...
随机推荐
- 学习AOP之深入一点Spring Aop
上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...
- ExtJS 4.2 第一个程序
本篇介绍如何创建一个ExtJS应用程序.并通过创建目录.导入文件.编写代码及分析代码等步骤来解释第一个ExtJS程序. 目录 1. 创建程序 1.1 创建目录建议 1.2 实际目录 1.3 index ...
- C++中的命名空间
一,命名空间(namespace)的基本概念以及由来 1.什么是标识符: 在C++中,标识符可以是基本的变量,类,对象,结构体,函数,枚举,宏等. 2.什么是命名空间: 所谓的命名空间是指标识符的可见 ...
- iOS开发之Alamofire源码深度解析
今天博客中的Alamofire源码的版本是以现在最新的3.4版本为例.上篇博客系统的对NSURLSession相关的东西进行了详细的解析,详情请看<详解NSURLSession>,为了就是 ...
- python与c互相调用
虽然python开发效率很高,但作为脚本语言,其性能不高,所以为了兼顾开发效率和性能,通常把性能要求高的模块用c或c++来实现或者在c或c++中运行python脚本来处理逻辑,前者通常是python中 ...
- Android之使用Bundle进行IPC
一.Bundle进行IPC介绍 四大组件中的三大组件(Activity.Service.Receiver)都是支持在Intent中传递Bundle数据的,由于Bundle实现了Parcelable接口 ...
- IIS启动失败,启动Windows Process Activation Service时,出现错误13:数据无效 ;HTTP 错误 401.2 - Unauthorized 由于身份验证头无效,您无权查看此页
因为修改过管理员账号的密码后重启服务器导致IIS无法启动,出现已下异常 1.解决:"启动Windows Process Activation Service时,出现错误13:数据无效&quo ...
- 一键生成APP官网
只需要输入苹果下载地址,安卓市场下载地址,或者内测下载地址,就能一键生成APP的官网,方便在网上推广. 好推APP官网 www.hotapp.cn/app
- mysql join 和left join 对于索引的问题
今天遇到一个left join优化的问题,搞了一下午,中间查了不少资料,对MySQL的查询计划还有查询优化有了更进一步的了解,做一个简单的记录: select c.* from hotel_info_ ...
- 简约而不简单的Django新手图文教程
本文面向:有python基础,刚接触web框架的初学者. 环境:windows7 python3.5.1 pycharm专业版 Django 1.10版 pip3 一.Django简介 百度百 ...