javascript - Direktíva sa volá iba raz
Vytvoril som vlastnú direktívu, ktorá sa vkladá do môjho vstupného poľa. Cieľom tejto direktívy je analyzovať hodnoty/dáta vo vnútri vstupného poľa. Táto direktíva má byť volaná vždy, keď vstupné pole získava fokus/kurzor.
Problém však je, že moja vlastná direktíva sa volá iba raz. Nie som si istý, prečo sa nevolá každý raz, keď je vstupné pole zamerané.
Čo tu robím zle?
Som nový v Angular, takže som si istý, že som niekde prehliadol nejaký dôležitý detail.
Tu je plunker.
Odpoveď č. 1
To je očakávané správanie, funkcia link sa volá iba raz pre každú konkrétnu inštanciu direktívy. Keďže máte záujem o udalosť focus, pridal som poslucháča udalostí na element, na ktorý je direktíva aplikovaná:
var mainApp = angular.module("myapp", ['ngMaterial']);
mainApp.directive("myDirective", function($log) {
return {
restrict : 'A',
require : "ngModel",
scope : {
myDirective : "="
},
link : function(scope, element, attrs, ngModel) {
element.on('focus', doSomething);
function doSomething() {
$log.log("value is:", scope.myDirective);
if (ngModel.$isEmpty() && scope.myDirective && scope.myDirective.length > 0) {
ngModel.$setUntouched();
ngModel.$setValidity();
}
}
}
}
});
Plunker
Keďže ste spomenuli aj 'kurzor', môžete mať záujem aj o udalosť mouseover. Je to také jednoduché, ako pridať ďalšieho poslucháča udalostí:
element.on('mouseover', doSomething)Poznámka: Pridal som ďalšiu kontrolu pre scope.myDirective, aby sa predišlo chybám v konzole pri čítaní length z undefined.
Na žiadosť pôvodného autora:
Neviem, či jqLite podporuje všetky tieto, ale pre zoznam všetkých DOM udalostí by ste mali skontrolovať túto stránku, pravdepodobne vás najviac zaujímajú udalosti zamerania, klávesnice a myši.
Pre zoznam všetkých funkcií jqLite skontrolujte toto
