frameworkModule.controller('appMultiSelectController', ['$scope', '$log', function ($scope, $log) { 'use strict'; $log.debug('appMultiSelectController.ctor()...'); /** * @this-option-map: # 下拉的选项映射, * # 接受两种类型的映射, * # 1,一维数组 [] * # 2,键值对对象 {} * @this-selected: # 最终的选项的结果, * # 以String[]类型输出给绑定的值 * # 如果data-option-map绑定的是{},则输出选中的元素的key * # 如果绑定的是[],就输出选中的元素 * @this-callback: # 如果第一时间无法获取承接选项结果的对象 * # 可以传入一个回调函数,在函数里面执行赋值操作 * # 回调函数的参数为@data-selected * @this-option-type: # 有两种渲染类型:单选-radio 复选-checkbox,默认为checkbox * */ $scope.selected = $scope.thisSelected || ""; $scope.optionMap = $scope.thisOptionMap || {}; $scope.defaultChecked = $scope.thisDefaultChecked || []; $scope.callback = $scope.thisCallback || function () {}; $scope.optionType = (function (optionType) { if (!optionType) { optionType = "checkbox"; } return optionType; })($scope.thisOptionType); $scope.analysisOptionMap = function(optionMap){ var optionKeys = []; var optionValues = []; if (Object.prototype.toString.call(optionMap) === '[object Array]') { optionMap.forEach(function (item,index) { if(Object.prototype.toString.call(item) === '[object Object]'){ var thisItemObj = item; var thisItemKeys = Object.keys(thisItemObj); if(thisItemKeys.length > 2){ throw error("pmsMultiSelect组件,thisOptionMap参数传入的类型不支持,请参阅‘js/pmsComponent/pmsMultiSelec/说明文档.md’"); } optionKeys[index] = thisItemKeys[0]; optionValues[index] = thisItemObj[thisItemKeys[0]]; }else{ // 如果是纯数组进来的视图,key值也绑定为value值,因为最后只会返回key值 optionKeys[index] = item; optionValues[index] = item; } }); } if (Object.prototype.toString.call(optionMap) === '[object Object]') { // result = optionMap; Object.keys(optionMap).forEach(function(optionItemKey,optionItemIndex){ optionKeys[optionItemIndex] = optionItemKey; optionValues[optionItemIndex] = optionMap[optionItemKey]; }); } return { keys: optionKeys, values: optionValues, } }; $scope.optionKeys = $scope.analysisOptionMap($scope.thisOptionMap).keys; $scope.optionValues = $scope.analysisOptionMap($scope.thisOptionMap).values; $scope.checkedValues = []; $scope.checkedKeys = []; $scope.showOptionMenu = false; }]);