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) ...
随机推荐
- React 入门教程
React 起源于Facebook内部项目,是一个用来构建用户界面的 javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组件内 ...
- python之路 - 基础1
1.安装windows安装双版本Python2,Python3 下载Python2和Python3https://www.python.org/downloads/ 分别安装两个版本 进入Python ...
- 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...
- .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper
好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...
- 【Big Data】HADOOP集群的配置(一)
Hadoop集群的配置(一) 摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问 ...
- 玩转spring boot——结合AngularJs和JDBC
参考官方例子:http://spring.io/guides/gs/relational-data-access/ 一.项目准备 在建立mysql数据库后新建表“t_order” ; -- ----- ...
- winform异步加载数据到界面
做一个学习记录. 有两个需求: 1.点击按钮,异步加载数据,不卡顿UI. 2.把获取的数据加载到gridview上面. 对于需求1,2,代码如下: public delegate void ShowD ...
- the Zen of Python---转载版
摘自译文学习区 http://article.yeeyan.org/view/legendsland/154430 The Zen of Python Python 之禅 Beautiful is b ...
- RSA算法
RSA.h #ifndef _RSA_H #define _RSA_H #include<stdio.h> #include<iostream> #include<mat ...
- document.compatMode
在我电脑屏幕上显示的 电脑是 1920*1080这是在document.compatMode:css1Compat模式 window.screen.availWidth 1920 window.scr ...