Heim >Web-Frontend >js-Tutorial >Erstellen eines Typeakhead -Widgets mit AngularJS - SitePoint
<span>var typeAhead = angular.module('app', []); </span> typeAhead<span>.factory('dataFactory', function($http) { </span> <span>return { </span> <span>get: function(url) { </span> <span>return $http.get(url).then(function(resp) { </span> <span>return resp.data; // success callback returns this </span> <span>}); </span> <span>} </span> <span>}; </span><span>});</span>Der vorherige Code erstellt eine Fabrik namens DataFactory, die JSON -Daten von einer API abruft. Wir werden nicht auf die Details der Fabrik eingehen, aber wir müssen kurz verstehen, wie der $ HTTP -Dienst funktioniert. Sie übergeben eine URL an die Get () -Funktion, die ein Versprechen zurückgibt. Ein weiterer Anruf zu diesem Versprechen gibt auch ein weiteres Versprechen zurück (wir geben dieses Versprechen von der Fabrikfunktion der Fabrik zurück). Dieses Versprechen wird mit dem Rückgabewert des Erfolgsrückrufs gelöst, der an dann () übergeben wird. In unserem Controller interagieren wir also nicht direkt mit $ http. Stattdessen bitten wir um eine Instanz der Fabrik im Controller und rufen ihre Get () -Funktion mit einer URL auf. Unser Controller -Code, der mit der Fabrik interagiert, sieht also so aus:
typeAhead<span>.controller('TypeAheadController', function($scope<span>, dataFactory</span>) { // DI in action </span> dataFactory<span>.get('states.json').then(function(data) { </span> $scope<span>.items = data; </span> <span>}); </span> $scope<span>.name = ''; // This will hold the selected item </span> $scope<span>.onItemSelected = function() { // this gets executed when an item is selected </span> <span>console.log('selected=' + $scope.name); </span> <span>}; </span><span>});</span>Der vorherige Code verwendet einen API -Endpunkt namens States.json, der eine JSON -Liste von US -Staaten zurückgibt. Wenn die Daten verfügbar sind, speichern wir die Liste in den Umfangsmodellelementen. Wir verwenden auch den Modellnamen, um das ausgewählte Element zu halten. Schließlich wird die Funktion onItemSelected () ausgeführt, wenn der Benutzer einen bestimmten Status auswählt.
typeAhead<span>.directive('typeahead', function($timeout) { </span> <span>return { </span> <span>restrict: 'AEC', </span> <span>scope: { </span> <span>items: '=', </span> <span>prompt: '@', </span> <span>title: '@', </span> <span>subtitle: '@', </span> <span>model: '=', </span> <span>onSelect: '&' </span> <span>}, </span> <span>link: function(scope<span>, elem, attrs</span>) { </span> <span>}, </span> <span>templateUrl: 'templates/templateurl.html' </span> <span>}; </span><span>});</span>In der Richtlinie erstellen wir einen isolierten Bereich, der mehrere Eigenschaften definiert:
<span>var typeAhead = angular.module('app', []); </span> typeAhead<span>.factory('dataFactory', function($http) { </span> <span>return { </span> <span>get: function(url) { </span> <span>return $http.get(url).then(function(resp) { </span> <span>return resp.data; // success callback returns this </span> <span>}); </span> <span>} </span> <span>}; </span><span>});</span>
typeAhead<span>.controller('TypeAheadController', function($scope<span>, dataFactory</span>) { // DI in action </span> dataFactory<span>.get('states.json').then(function(data) { </span> $scope<span>.items = data; </span> <span>}); </span> $scope<span>.name = ''; // This will hold the selected item </span> $scope<span>.onItemSelected = function() { // this gets executed when an item is selected </span> <span>console.log('selected=' + $scope.name); </span> <span>}; </span><span>});</span>Zunächst rendern wir ein Eingabentextfeld, in dem der Benutzer eingeben wird. Die Eingabeaufforderung für den Umfang der Umfang wird dem Platzhalterattribut zugeordnet. Als nächstes durchlaufen wir die Liste der Zustände und zeigen den Namen und die Abkürzungseigenschaften an. Diese Eigenschaftsnamen werden über die Eigenschaften des Titel- und Untertitels -Umfangs konfiguriert. Die Richtlinien NG-Mausentrum und NG-Klasse werden verwendet, um den Eintrag hervorzuheben, wenn ein Benutzer mit der Maus schwebt. Als nächstes verwenden wir Filter: Modell, das die Liste durch den in das Eingangsfeld eingegebenen Text filtert. Schließlich haben wir die NG-Hide-Anweisung verwendet, um die Liste auszublenden, wenn entweder das Feld Eingabetxt leer ist oder der Benutzer ein Element ausgewählt hat. Die ausgewählte Eigenschaft ist in der Funktion "HandleSelection () auf TRUE eingestellt und auf false false (um die Liste der Vorschläge anzeigen) festgelegt, wenn jemand in das Eingabefeld eingreift.
typeAhead<span>.directive('typeahead', function($timeout) { </span> <span>return { </span> <span>restrict: 'AEC', </span> <span>scope: { </span> <span>items: '=', </span> <span>prompt: '@', </span> <span>title: '@', </span> <span>subtitle: '@', </span> <span>model: '=', </span> <span>onSelect: '&' </span> <span>}, </span> <span>link: function(scope<span>, elem, attrs</span>) { </span> <span>}, </span> <span>templateUrl: 'templates/templateurl.html' </span> <span>}; </span><span>});</span>Die Funktionshandleselektion () aktualisiert die Eigenschaft von Scope, Modell, mit dem ausgewählten Statusnamen. Dann setzen wir die aktuellen und ausgewählten Eigenschaften zurück. Als nächstes nennen wir die Funktion Onselect (). Eine Verzögerung wird hinzugefügt, da das Zuordnungsbereich.Model = SelectedItem die Eigenschaft Bound Controller Scope nicht sofort aktualisiert. Es ist wünschenswert, die Rückruffunktion des Controller -Umfangs auszuführen, nachdem das Modell mit dem ausgewählten Element aktualisiert wurde. Aus diesem Grund haben wir einen $ Timeout -Service verwendet. Darüber hinaus werden die Funktionen iscurrent () und setCurrent () in der Vorlage zusammen verwendet, um Einträge im automatischen vollständigen Vorschlag hervorzuheben. Das folgende CSS wird auch verwendet, um den Highlight -Prozess abzuschließen.
<span>{ </span> <span>"name": "Alabama", </span> <span>"abbreviation": "AL" </span><span>}</span>
<span><span><span><input</span> type<span>="text"</span> ng-model<span>="model"</span> placeholder<span>="{{prompt}}"</span> ng-keydown<span>="selected=false"</span> /></span> </span><span><span><span><br</span>/></span> </span> <span><span><span><div</span> class<span>="items"</span> ng-hide<span>="!model.length || selected"</span>></span> </span> <span><span><span><div</span> class<span>="item"</span> ng-repeat<span>="item in items | filter:model track by $index"</span> ng-click<span>="handleSelection(item[title])"</span> <span>style<span>="<span>cursor:pointer</span>"</span></span> ng-class<span>="{active:isCurrent($index)}"</span> ng-mouseenter<span>="setCurrent($index)"</span>></span> </span> <span><span><span><p</span> class<span>="title"</span>></span>{{item[title]}}<span><span></p</span>></span> </span> <span><span><span><p</span> class<span>="subtitle"</span>></span>{{item[subtitle]}}<span><span></p</span>></span> </span> <span><span><span></div</span>></span> </span><span><span><span></div</span>></span></span>
.dropdown-menu {
Hintergrundfarbe: #f8f9fa;
Farbe: # 343A40;
Wie kann ich eine Funktionsfunktionalität der Objektauswahl mit Typeneakhead verwenden? TypeAdhead können Sie das Attribut "typeAeAead-on-selektieren" verwenden. Mit diesem Attribut können Sie eine Funktion angeben, die aufgerufen werden soll, wenn eine Übereinstimmung ausgewählt ist. Die Funktion wird am ausgewählten Element übergeben. Zum Beispiel:
$ scope.onSelect = Funktion (Element, Modell, Etikett) {
// Machen Sie etwas mit dem ausgewählten Element
};
Wie kann ich verwenden, wie ich verwenden kann, TypeAdhead mit Bootstrap in AngularJs? Dieses Modul bietet eine Reihe von AngularJS -Direktiven basierend auf dem Markup und CSS von Bootstrap. Die Typeakhead -Direktive kann wie folgt verwendet werden:
$ scope.getStates = function (val) {
return $ http.get ('/api/States', {
Params: {
zurücksend item.name;
});
});
}; GetStates ($ ViewValue) "... />
In diesem Beispiel ist GetStates eine Funktion, die Zustände von einem Remote -Server basierend auf dem von der eingegebenen Wert abreißt Benutzer.
Das obige ist der detaillierte Inhalt vonErstellen eines Typeakhead -Widgets mit AngularJS - SitePoint. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!