前言

在项目中需要用到remote combobox控件的情况, 大家都知道什么是 combobox. 那什么叫remote combobox呢?
所谓remote 就是指combobox的数据源需要通过远程调用,向数据服务发起请求获得,在请求过程中,combobox控件需要有可视化的UI来向用户表示我正在获取数据,需要您等一等。

本文所编写的控件参考了 kendo UI 的combobox的效果: Server filtering

如何使用

1.引入基本库: jquery 和 angularjs

<script src="/path/to/jquery-1.11.3.js"></script>
<script src="/path/to/angularjs_1.2.2.js"></script>

2.引入本文编写的remote-combobox的js和css代码

<script src="/path/to/angular-remote-combobox.js"></script>
<link rel="stylesheet" type="text/css" href="/path/to/angular-remote-combobox.css"/>

3.在脚本里使用

html:

<body ng-app="ngTest" ng-controller="ctrl">
    <combobox data-url="abcd"></combobox>
</body>

注意: 这里 data-url 是远端获取数据的url地址,其返回数据格式应该如下:

[
    { name : "漩涡1" , value : "18"},
    { name : "漩涡2" , value : "166"},
    { name : "漩涡5" , value : "13"},
    { name : "漩涡3" , value : "15"},
    { name : "漩涡11" , value : "615"},
    { name : "漩涡23" , value : "14"},
    { name : "漩涡1" , value : "123"},
    { name : "漩涡23" , value : "11"}
];

说白了是一个json数组,其中的item必须带有name属性,用来作为内容展示。

javascript:

<script type="text/javascript">
    angular.module("ngTest",["combobox"]).controller("ctrl",["$scope",function($scope){
        //监听combobox选择改变事件
        $scope.$on("comboBoxSelectChanged",function(event,item){
            alert("选择了:"  + JSON.stringify(item));
        });
    }]);
</script>

4.demo效果:

注意: demo里的 data-url设置为“abcd”这是错误的,其实demo里使用了一个自定义服务 comboboxDataSource 来模拟远端数据请求。如下:

<div ng-app="ngTest" ng-controller="ctrl">
    <combobox data-url="abcd" data-server="comboboxDataSource"></combobox>
</div>

定义combobox测试用的数据源 模拟远端数据 (定义一个服务)

combobox.factory('comboboxDataSource', ['$q',function($q){
    var comboboxDataSource = {};
    comboboxDataSource.getData = function(){
        var comboboxDataSourceList = [
            { name : "漩涡1" , value : "18"},
            { name : "漩涡2" , value : "166"},
            { name : "漩涡5" , value : "13"},
            { name : "漩涡3" , value : "15"},
            { name : "漩涡11" , value : "615"},
            { name : "漩涡23" , value : "14"},
            { name : "漩涡1" , value : "123"},
            { name : "漩涡23" , value : "11"}
        ];

        var deferred = $q.defer();
        setTimeout(function(){
            deferred.resolve(comboboxDataSourceList);
        },1000);

        return deferred.promise;
    };
    return comboboxDataSource;
}]);

如果要使用真实的url来获取数据,则需要正确填写data-url,并且移除data-server

github 地址

//提供源码和demo下载,点此链接 ,还没上传,待续。。。。