2017-05-25 2 views
0

Ich versuche, eine Autocomplete mit AngularJS ohne Verwendung von JQuery zu machen. Ich folgte this example. Hier ist der HTML-Code:"TypeError: iElement.autocomplete ist keine Funktion" in AngularJS 1.4.4, aber kein Fehler in AngularJS 1.0.0

<div ng-app='MyModule'> 
    <div ng-controller='DefaultCtrl'> 
     <input auto-complete ui-items="names" ng-model="selected"> 
     selected = {{selected}} 
    </div> 
</div> 

Hier ist die Steuerung und Richtlinie:

function DefaultCtrl($scope) { 
    $scope.names = ["john", "Bill", "Charlie"]; 
} 

angular.module('MyModule', []).directive('autoComplete', function($defer) { 
    return function(scope, iElement, iAttrs) { 
     scope.$watch(iAttrs.uiItems, function(values) { 
      iElement.autocomplete({ 
       source: values, 
       select: function() { 
        setTimeout(function() { 
         iElement.trigger('input'); 
        }, 0); 
       } 
      }); 

     }, true); 
    }; 
}); 

Der obige Code funktioniert perfekt mit Winkel 1.0.0. Aber wenn ich angular-1.4.4 verwende bricht es und ich bekomme einen Fehler in meinem Browser sagen: TypeError: iElement.autocomplete is not a function. Gibt es einen Workaround dafür in winkel-1.4.4?

HINWEIS: Ich versuche, es funktioniert OHNE mit JQuery, eckig-Ui oder einer Drittanbieter-Bibliothek.

Antwort

0

Was Sie verfolgen, ist ein altes Beispiel, das eine alte Version von eckig verwendet. Deshalb funktioniert es nicht.

Vielleicht wickeln die iElement mit der angular.element und mit der triggerHandler möglicherweise funktioniert es. Oder wenn mit jQuery versuchen Sie es mit $ wie einzuwickeln:

$(iElement).trigger('input'); 

Aber mein Vorschlag, auch wenn es funktioniert, ist der Winkel-ui ein zu schalten. Einfach viel besser, leistungsfähiger und einfacher:

https://angular-ui.github.io/bootstrap/#!#%2Ftypeahead

+0

Hallo danke für die Antwort. Aber ich versuche es ** ohne JQuery, angular-ui oder irgendeine andere Third-Party-Bibliothek ** funktionieren zu lassen. Ich habe meine Frage bearbeitet. –

+1

In meiner Antwort gibt es auch eine mögliche Lösung mit nur eckigen. Wickeln Sie Ihr iElement mit angle.element: 'angle.element (iElement)' und verwenden Sie den TriggerHandler, um die Eingabe auszulösen: http://api.jquery.com/triggerHandler/ – quirimmo

Verwandte Themen