Mám príklad angularJS
<div ng-controller="testCtrl">
<test color1="color1" updateFn="updateFn()"></test>
</div>
<script>
angular.module("dr", [])
.controller("testCtrl", function($scope) {
$scope.color1 = "color";
$scope.updateFn = function() {
alert("123");
}
})
.directive("test", function() {
return {
restrict: "E",
scope: {color1: "=",
updateFn: "&"},
template: "<button ng-click="updateFn()">Click</button>",
replace: true,
link: function(scope, elm, attrs) {
}
}
});
</script>
</body>
</html>
Chcem, keď kliknem na tlačidlo, objaví sa výstražné pole, ale nič sa nezobrazí.
Môže mi niekto pomôcť?
odpovede:
222 pre odpoveď č. 1Na volanie funkcie radiča v nadradenom rozsahu z vnútra smernice o izolácii rozsahu použite dash-separated
názvy atribútov v HTML, ako uviedol OP.
Ak chcete do svojej funkcie poslať parameter, zavolajte funkciu odovzdaním objektu:
<test color1="color1" update-fn="updateFn(msg)"></test>
JS
var app = angular.module("dr", []);
app.controller("testCtrl", function($scope) {
$scope.color1 = "color";
$scope.updateFn = function(msg) {
alert(msg);
}
});
app.directive("test", function() {
return {
restrict: "E",
scope: {
color1: "=",
updateFn: "&"
},
// object is passed while making the call
template: "<button ng-click="updateFn({msg : "Hello World!"})">
Click</button>",
replace: true,
link: function(scope, elm, attrs) {
}
}
});
139 pre odpoveď № 2
Možno mi niečo chýba, ale aj keď ostatné riešenia nazývajú funkcia nadradeného rozsahu, neexistuje možnosť odovzdať argumenty z direktívneho kódu, je to preto, že update-fn
volá updateFn()
s pevnými parametrami, napr {msg: "Hello World"}
, Malá zmena umožňuje smernici prijať argumenty, ktoré by podľa môjho názoru boli oveľa užitočnejšie.
<test color1="color1" update-fn="updateFn"></test>
Všimnite si, že HTML prechádza funkčným odkazom, t. J. Bez ()
zátvorky.
JS
var app = angular.module("dr", []);
app.controller("testCtrl", function($scope) {
$scope.color1 = "color";
$scope.updateFn = function(msg) {
alert(msg);
}
});
app.directive("test", function() {
return {
restrict: "E",
scope: {
color1: "=",
updateFn: "&"
},
// object is passed while making the call
template: "<button ng-click="callUpdate()">
Click</button>",
replace: true,
link: function(scope, elm, attrs) {
scope.callUpdate = function() {
scope.updateFn()("Directive Args");
}
}
}
});
Takže vo vyššie uvedenom texte HTML volá miestny rozsah callUpdate
Funkcia, ktorá potom „načíta“ updateFn z nadradeného rozsahu a volá vrátenú funkciu s parametrami, ktoré môže smernica vygenerovať.
36 pre odpoveď č. 3
Vo vašej „testovacej“ direktíve Html je názov atribútu funkcie nemal by byť na ťave, ale na báze pomlčiek.
tak - namiesto:
<test color1="color1" updateFn="updateFn()"></test>
píšu:
<test color1="color1" update-fn="updateFn()"></test>
Toto je uhlový spôsob, ako zistiť rozdiel medzi atribútmi direktívy (ako je napríklad update-fn function) a funkciami.
3 pre odpoveď č. 4
Ako je to s prechodom funkcie regulátora pomocou obojsmerná väzba? Potom ju môžete v smernici použiť rovnako ako v bežnej šablóne (kvôli jednoduchosti som odstránil irelevantné časti):
<div ng-controller="testCtrl">
<!-- pass the function with no arguments -->
<test color1="color1" update-fn="updateFn"></test>
</div>
<script>
angular.module("dr", [])
.controller("testCtrl", function($scope) {
$scope.updateFn = function(msg) {
alert(msg);
}
})
.directive("test", function() {
return {
scope: {
updateFn: "=" // "=" bidirectional binding
},
template: "<button ng-click="updateFn(1337)">Click</button>"
}
});
</script>
Pristál som na túto otázku, pretože som vyskúšal vyššie uvedenú metódu, ale nejako to nefungovalo. Teraz to funguje perfektne.
2 pre odpoveď № 5
pre pomenovanie atribútu používajte pomlčku a malé písmená (podobne ako iné uvedené odpovede):
<test color1="color1" update-fn="updateFn()"></test>
A v rozsahu smernice použite „=“ namiesto „&“:
scope: { updateFn: "="}
Potom môžete použiť updateFn ako každú inú funkciu:
<button ng-click="updateFn()">Click</button>
Nech sa páči!
0 pre odpoveď č. 6
Musel som použiť väzbu „=“ namiesto „&“, pretože to nefungovalo. Podivné správanie.