javascript – Angularjs jquery UI自动完成

前端之家收集整理的这篇文章主要介绍了javascript – Angularjs jquery UI自动完成前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在Angular指令中实现 jquery自动完成.我收到的数据源自websocket响应.这不行,我认为响应延迟是造成这个问题的.

如果有人可以对下面的代码进行阐述,我会感激一下.有什么优雅的技术来实现这种使用某种请求/响应或承诺吗?

app.directive('autoComplete',function($rootScope,locationAutoCompleteService,$timeout,$http,programLocationModel ) {
    return {
        restrict: 'A',scope: {

            serviceType: '@serviceType'
        },link: function(scope,elem,attr,ctrl) {

            var autoItem = [];

            scope.change = function () {

                locationAutoCompleteService.unSubscribe();

                var service = locationAutoCompleteService.getServiceDefinition();

                service.filters.pattern = scope.inputVal;

                locationAutoCompleteService.subscribe();

            };

            scope.$on('myData',function(event,message){

                if ( message !== null && message.results !== null) {

                    autoItem = [];

                    for ( var i = 0; i < message.results.length; i++) {

                        autoItem.push({ label: message.results[i].name,id: message.results[i].id });
                    }

                }

            });

            elem.autocomplete({

                source: autoItem,select: function( event,ui ) {

                    $timeout(function() {

                        elem.trigger('input');

                    },0);

                }
            });
        }
    };
});

解决方法

你可以随时利用这些人所做的工作: http://angular-ui.github.io/bootstrap

– 向下滚动到头脑 –

这是一个Plunkr:http://plnkr.co/edit/9zsrvLLfH8hKGwmIeZVv?p=preview

这里有一些标记

HTML

<div class='container-fluid' ng-controller="TypeaheadCtrl">
    <pre>Model: {{selected| json}}</pre>
    <input type="text" ng-model="selected" typeahead="state for state in states | filter:$viewValue">
</div>

JS

function TypeaheadCtrl($scope) {

  $scope.selected = undefined;
  $scope.states = ['Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','Florida','Georgia','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Dakota','North Carolina','Ohio','Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming'];
}

更新

看来我正在关注错误的问题.尝试在$on处理程序中移动自动完成调用.

喜欢这个:

app.directive('autoComplete',programLocationModel) {
    return {
        restrict: 'A',scope: {
            serviceType: '@serviceType'
        },ctrl) {
            var autoItem = [];
            scope.change = function() {
                locationAutoCompleteService.unSubscribe();
                var service = locationAutoCompleteService.getServiceDefinition();
                service.filters.pattern = scope.inputVal;
                locationAutoCompleteService.subscribe();
            };
            scope.$on('myData',message) {
                if (message !== null && message.results !== null) {
                    autoItem = [];
                    for (var i = 0; i < message.results.length; i++) {
                        autoItem.push({
                            label: message.results[i].name,id: message.results[i].id
                        });
                    }
                    elem.autocomplete({
                        source: autoItem,select: function(event,ui) {
                            $timeout(function() {
                                elem.trigger('input');
                            },0);
                        }
                    });
                }
            });
        }
    };
});
原文链接:https://www.f2er.com/jquery/154029.html

猜你在找的jQuery相关文章