将angularJS与插件select2结合使用即可

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" href="bootstrap.min.css" />
    <link rel="stylesheet" href="select2.css" />
    <link rel="stylesheet" href="select2-bootstrap.css" />
    <script type="text/javascript" src="jquery.1.11.1.js"></script>
    <script type="text/javascript" src="angular.1.2.10.min.js"></script>
   <script type="text/javascript" src="select2.min.js"></script>
        <title>Title</title>
        
</head>
<body ng-app="demo" ng-controller="app">
<div class="col-sm-offset-2 col-sm-6">
<select  select2  ng-model="search" ng-options="a for a in na"   style="width:200px"></select>
<select select2 ng-model="search1" ng-options="name['网址'] for name in names track by $index|filter:search" style="width:200px"></select>
<input  select2  ng-model="search" select2-model="aS2" config="config1" type="text"  class="form-control">
</div>
</body>
<script type="text/javascript">
   
   var app=angular.module("demo",[]);
   app.controller('app',['$scope',function($scope){
     //  $scope.names=["小王","小明","小张","鹏鹏","大叔","张珊","李四"];//select标签的数据可谓对象也可以为数组
       $scope.names=[
    {"网址" : "Google", url : "a.html"},//当这边是中文时注意使用name['网址'],当不是中文时直接用name.字段名就好即分别为对象的两种取值方式,对象引用时前一种方式更为常见
    {"网址" : "Runoob", url : "b.html"},
    {"网址" : "Taobao", url : "c.html"}
]
                //console.log(typeof $scope.names);
       $scope.na=['白','大','李'];
       
        $scope.config1 = {
        data: [],
        placeholder: '尚无数据'
    };
     $scope.config1.data = [{id:1,text:'bug'},{id:2,text:'duplicate'},{id:3,text:'invalid'},{id:4,text:'wontfix'}]//用input形式数据的形式必须为中种结构,不然会报错
   }])
   app.directive('select2', function () {
    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="" ng-if="false"></option>')//避免出现空的选项
                    .val('')
                    .select2(config);

                // model - view
                scope.$watch('ngModel', function (newVal) {
                    
                    setTimeout(function () {
                        $element.find('[value^="?"]').remove();    // 清除错误的数据
                     
                    },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);
            }
        }
    }
});

   //自定义过滤器,可以在过滤中传递多个参数,依次获取
  app.filter('myfilter',function(){
      return function(input,param){
         //console.log(input);
        // console.log(param);
         var newInput=input.filter(function(item,index){
        
           if(item.indexOf(param)!==-1)
             return item;
         })

         return newInput;
       }
  })
</script>
</html>

最新文章

  1. java Collections.sort()实现List排序自定义方法
  2. Python之路 day2 集合的基本操作
  3. js的预编译机制
  4. poj1062 最短路
  5. Gym 100818I Olympic Parade(位运算)
  6. 校友信息管理系统&amp;SNS互动平台之用户需求及概要设计
  7. session原理解析
  8. [RxJS] Reactive Programming - New requests from refresh clicks -- merge()
  9. &lt; IOS &gt; 文件中 某个类设置ARC,或者非ARC
  10. opencv图像融合(给人脸添加一个眼镜)
  11. 如何在js中使用递归
  12. Web常见安全漏洞-SQL注入
  13. Redis在windows下的安装下载
  14. 《Linux 性能及调优指南》3.2 CPU瓶颈
  15. SQL Server 提高执行效率的16种方法
  16. 创建、修改、删除ORACLE表空间
  17. VS2010启动多个实例调试
  18. JavaScript 触发click事件 兼容FireFox,IE 和 Chrome
  19. javascript 与vbscript 互相调用
  20. CVE-2018-8420 漏洞复现

热门文章

  1. md5 (c语言)
  2. quartz.net插件类库封装(含源码)
  3. hdu 1501 Zipper
  4. 与你相遇好幸运,Postgresql和postgis安装
  5. C#将数据大小字节转换为MB,GB,TB
  6. VMware下虚拟机的转移
  7. 全站 HTTPS 来了
  8. CSS3动画里的过渡效果
  9. 如何让win10实现关机确认-暂没确认
  10. NoSQL-Redis【2】-HDEL给我的一个惊喜