Ich verwende sowohl Bootstrap als auch AngularJS in meiner Web-App. Ich habe einige Schwierigkeiten, die beiden zusammenzubringen.
Ich habe ein Element, das das Attribut hat data-provide="typeahead"
<input id="searchText" ng-model="searchText" type="text"
class="input-medium search-query" placeholder="title"
data-provide="typeahead" ng-change="updateTypeahead()" />
Und ich möchte das data-source
Attribut aktualisieren , wenn der Benutzer in das Feld eingibt. Die Funktion updateTypeahead
wird korrekt ausgelöst, aber ich habe keinen Zugriff auf das Element, das das Ereignis ausgelöst hat, es sei denn, ich verwende $('#searchText')
den jQuery-Weg, nicht den AngularJS-Weg.
Was ist der beste Weg, um AngularJS dazu zu bringen, mit JS-Modulen alten Stils zu arbeiten?
quelle
<li ng-repeat="item in items" role="menuitem" ng-class="{\'selected\' : isSelected($event, item)}">
Der allgemeine Angular-Weg, um Zugriff auf ein Element zu erhalten, das ein Ereignis ausgelöst hat, besteht darin, eine Direktive zu schreiben und () an das gewünschte Ereignis zu binden:
oder mit DDO (gemäß dem Kommentar von @ tpartee unten):
Die obige Richtlinie kann wie folgt verwendet werden:
Plunker .
Geben Sie in das Textfeld ein und lassen Sie / unscharf. Die Rückruffunktion wird ausgelöst. Innerhalb dieser Rückruffunktion haben Sie Zugriff auf
element
.Einige integrierte Anweisungen unterstützen die Übergabe eines $ event-Objekts. ZB ng- * click, ng-Mouse *. Beachten Sie, dass ng-change dieses Ereignis nicht unterstützt.
Obwohl Sie das Element über das $ event-Objekt erhalten können:
das geht "tief gegen den Winkelweg" - Misko .
quelle
Sie können leicht wie dieses erste Schreibereignis auf Element bekommen
und in Ihrer js-Datei wie unten
Ich habe es auch benutzt.
quelle
Es gibt eine Lösung mit $ element im Controller, wenn Sie keine weitere Direktive für dieses Problem erstellen möchten:
Und das wird mit ng-change funktionieren :
quelle
Wenn Sie einen Modellwert möchten, können Sie im ausgelösten Ereignis wie folgt schreiben: $ scope.searchText
quelle
Ich bin nicht sicher, welche Version Sie hatten, aber diese Frage wurde vor langer Zeit gestellt. Derzeit kann ich mit Angular 1.5 das
ng-keypress
Ereignis und diedebounce
Funktion von Lodash verwenden , um ein ähnliches Verhalten wie zu emulierenng-change
, sodass ich das $ -Ereignis erfassen kannquelle
So übergeben Sie das Quellelement in Winkel 5:
quelle