Angularjs jquery UI autocomplete

前端 未结 1 1373
长发绾君心
长发绾君心 2021-02-04 11:47

I\'m trying to implement jquery\'s autocomplete in an Angular directive. The data I\'m receiving for source is coming from websocket response. It\'s not working and I think resp

1条回答
  •  不思量自难忘°
    2021-02-04 12:01

    You could always leverage the work these guys have done: http://angular-ui.github.io/bootstrap

    -Scroll down to typeahead-

    Here is a Plunkr: http://plnkr.co/edit/9zsrvLLfH8hKGwmIeZVv?p=preview

    Here is some markup:

    HTML

    Model: {{selected| json}}

    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'];
    }
    

    Update

    It seems like I was focussing on the wrong problem. Try moving the autocomplete call inside the $on handler.

    Like this:

    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);
                            }
                        });
                    }
                });
            }
        };
    });
    

    0 讨论(0)
提交回复
热议问题