var app = angular.module('app', []);/** * select2封装 * @param {scope} ng-model 选中的ID * @param {scope} select2-model 选中的详细内容 * @param {scope} config 自定义配置 * @param {String} [query] 内置的配置 (怎么也还得默认一个config) * @example * <input select2 ng-model="a" select2-model="b" config="config" type="text" placeholder="占位符" /> * <input select2 ng-model="a" select2-model="b" config="default" query="member" type="text" placeholder="占位符" /> * <select select2 ng-model="b" class="form-control"></select> */app.directive('select2', function (select2Query) { return { restrict: 'A', scope: { config: '=', ngModel: '=', select2Model: '=' }, link: function (scope, element, attrs) { // 初始化 var tagName = element[0].tagName, config = { allowClear: true, multiple: !!attrs.multiple, placeholder: attrs.placeholder || ' ' // 修复不出现删除按钮的情况 }; // 生成select if(tagName === 'SELECT') { // 初始化 var $element = $(element); delete config.multiple; $element .prepend('<option value=""></option>') .val('') .select2(config); // model - view scope.$watch('ngModel', function (newVal) { setTimeout(function () { $element.find('[value^="?"]').remove(); // 清除错误的数据 $element.select2('val', newVal); },0); }, true); return false; } // 处理input if(tagName === 'INPUT') { // 初始化 var $element = $(element); // 获取内置配置 if(attrs.query) { scope.config = select2Query[attrs.query](); } // 动态生成select2 scope.$watch('config', function () { angular.extend(config, scope.config); $element.select2('destroy').select2(config); }, true); // view - model $element.on('change', function () { scope.$apply(function () { scope.select2Model = $element.select2('data'); }); }); // model - view scope.$watch('select2Model', function (newVal) { $element.select2('data', newVal); }, true); // model - view scope.$watch('ngModel', function (newVal) { // 跳过ajax方式以及多选情况 if(config.ajax || config.multiple) { return false } $element.select2('val', newVal); }, true); } } }});/** * select2 内置查询功能 */app.factory('select2Query', function ($timeout) { return { testAJAX: function () { var config = { minimumInputLength: 1, ajax: { url: "http://api.rottentomatoes.com/api/public/v1.0/movies.json", dataType: 'jsonp', data: function (term) { return { q: term, page_limit: 10, apikey: "ju6z9mjyajq2djue3gbvv26t" }; }, results: function (data, page) { return {results: data.movies}; } }, formatResult: function (data) { return data.title; }, formatSelection: function (data) { return data.title; } }; return config; } }});app.controller('appCtrl', function ($scope, $timeout) { $scope.config1 = { data: [], placeholder: '尚无数据' }; $timeout(function () { $scope.config1.data = [{id:1,text:'bug'},{id:2,text:'duplicate'},{id:3,text:'invalid'},{id:4,text:'wontfix'}] $scope.config1.placeholder = '加载完毕' }, 1000); $scope.config2 = [ {id: 6, text: '来自ng-repeat'}, {id: 7, text: '来自ng-repeat'}, {id: 8, text: '来自ng-repeat'} ]; $scope.config3 = { data: [{id:1,text:'bug'},{id:2,text:'duplicate'},{id:3,text:'invalid'},{id:4,text:'wontfix'}] // 其他配置略,可以去看看内置配置中的ajax配置 };});angular.bootstrap(document, ['app']);
下载多选下拉 angularjs插件 示例源码下载(select2)用户还喜欢
- 18480 文章数
- 500万+ 热度
作者专栏
编辑推荐
- 淡抹u2引擎,修复内容较多,物有所值
- 界域传说·经典巨作=传世单机(一键安装)
- 丸子版本(175个传世版本大集合)
- GS版本:神话公益服务端+客户端
- 图片放大工具(放大图片不模糊)
- 剪映无限制VIP版
- 传奇世界客户端下载器,史上最全传世客户端
- 传世GS20220920商业引擎注册+登录配置器 解压密码是1
- U2官方排行榜游戏网关 支持元神,支持传家宝
- GS开战传世客户端+服务端
- (淡漠夕阳)u2引擎合区工具
- 传世GS引擎消除“你的游戏客户端版本号过旧,请及时更新”提示
- 传世一机多区双线路配置器--免密码版本
- 传世凤凰登陆器劫持修复软件
- SQLite3 for Navicat
- 传奇世界npc对话框编辑工具
- 传世GS落霞铭文服务器端
- gs_20210409引擎包+注册机(无限制)
- 传奇世界NPC对话封包查看器[支持时长版和极速版]
- 彩虹引擎传世脚本编辑工具1.7版来了,支持函数脚本翻译
评论