发表于: 2017-02-06 01:53:44
1 1530
今天完成的事情:
基本完成前台后台整理:
搜索面板指令添加功能,单选与多选、清除、数据过滤。
面板数据保持;
页面跳转bug;
明天计划的事情:
开始小程序学习
遇到的问题:
之前写前台时,没有多选接口,今天测试多选已经可以用了,参数形式形如:
于是修改之前的指令;
要做三个事情:
1、指令输出数据格式为:1,2,3;
2、面板记录点击选择情况:无选择默认为不限,有选择则标记选择,取消不限;重复点击则为取消;
3、通过url参数变化改变对应样式;
实现:
html:
<options ng-model="vm.profession.industry" label-name="所属行业" options-name="industry" checkbox="true" do-cleaner="vm.doClean"></options>
scope.checkBox = attrs.checkbox;//html中属性checkbox为true则进入多选模式
scope.checkBox ? scope.choose = chooseBox : scope.choose = choose;
template:
<a ng-class="{'active':checkBox?(valueArr|hasInArr:option.type):option.type===selectValue}" ng-click="choose(option.type)" ng-repeat="option in options">{{option.name}}</a>
selectValue: '=ngModel',//输出值
//多选
function chooseBox(value) {
//选不限则清空,否则去重
value === null ? arr = [null] : arr = duplicateRemoval(value, arr);//去重
//至少一个选项为不限
scope.valueArr.length ? scope.valueArr = arr : scope.valueArr = [null];//valueArr为面板展示数组arr,通过判断所选值是否在数组内来决定添加和删除样式;
scope.selectValue = arr.join();//输出值
}
.factory('duplicateRemoval', function () {
return function (n, arr) { //n为选中值,arr为当前已选数组
var inArr = false;
arr[0] === null ? arr = [] : ''; //有选择行为时清除默认选择情况
angular.forEach(arr, function (data, idx) { //判断是否重复
data === n ? remove(idx) : '';
});
function remove(idx) {
arr.splice(idx, 1);
inArr = true;
}
inArr ? '' : arr.push(n);
return arr
}
})
根据url变化对应样式:
scope.checkBox && paramster.get(scope.optionsName) ? scope.valueArr = arr = toNum(paramster.get(scope.optionsName).toString().split(',')) : scope.valueArr = [null];
启用多选且url中有值:将字符串转为number型数组;
//监听清空命令
scope.$watch('doCleaner', function (n, o) {//直接监听selectValue问题太多,会出现 ",1,2,3"这种情况,第一个为null,各种处理相对麻烦
n !== o ? scope.valueArr = arr = [null] : ''
})
vm.doClean=!vm.doClean;//控制器中
结果:
searchjob?category=5,4,2&experience=3
收获:
如上
评论