Saya punya contoh 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>
Saya ingin ketika saya mengklik tombol, kotak peringatan akan muncul, tetapi tidak ada yang ditampilkan.
Ada yang bisa bantu saya?
replace
atribut telah usang dalam AngularJS: stackoverflow.com/questions/24194972/...updateFn({msg: 'my message'});
harus digunakan dalam format itu saat melakukan pemanggilan fungsi di dalamlink
fungsi direktif .Mungkin saya kehilangan sesuatu, tetapi meskipun solusi lain memanggil fungsi lingkup induk tidak ada kemampuan untuk melewati argumen dari kode direktif, ini karena
update-fn
memanggilupdateFn()
dengan parameter tetap, misalnya{msg: "Hello World"}
. Sedikit perubahan memungkinkan arahan untuk mengeluarkan argumen, yang saya pikir jauh lebih berguna.Perhatikan HTML melewati referensi fungsi, yaitu, tanpa
()
tanda kurung.JS
Jadi di atas, HTML memanggil
callUpdate
fungsi lingkup lokal , yang kemudian 'mengambil' updateFn dari lingkup induk dan memanggil fungsi yang dikembalikan dengan parameter yang dapat dihasilkan oleh direktif.http://jsfiddle.net/mygknek2/
sumber
ng-click="updateFn()('Directive Args')"
Di tag Html directive 'test' Anda, nama atribut fungsi tidak boleh camelCased, tetapi berbasis dash.
jadi - bukannya:
menulis:
Ini adalah cara sudut untuk membedakan antara atribut direktif (seperti fungsi update-fn) dan fungsi.
sumber
Bagaimana dengan melewatkan fungsi pengontrol dengan pengikatan dua arah ? Kemudian Anda dapat menggunakannya dalam direktif persis dengan cara yang sama seperti pada template biasa (saya melucuti bagian yang tidak relevan untuk kesederhanaan):
Saya mendarat di pertanyaan ini, karena saya mencoba metode di atas befire, tetapi entah bagaimana itu tidak berhasil. Sekarang ini berfungsi dengan baik.
sumber
gunakan tanda hubung dan huruf kecil untuk nama atribut (seperti kata jawaban lain):
Dan gunakan "=" bukan "&" dalam ruang lingkup direktif:
Kemudian Anda dapat menggunakan updateFn seperti fungsi lainnya:
Ini dia!
sumber
update-fn="updateFn"
Saya harus menggunakan "=" mengikat alih-alih "&" karena itu tidak berfungsi. Perilaku aneh.
sumber
update-fn="updateFn()"
Anda harus menyertakan tanda kurung (dan mungkin params). Melewatkannya sebagai referensi fungsiupdate-fn="updateFn"
tidak akan bekerja dengan&
penjilidan@JorgeGRC Terima kasih atas jawaban Anda. Namun satu hal, bagian "mungkin" sangat penting. Jika Anda memiliki parameter, Anda harus memasukkannya di template Anda juga dan pastikan untuk menentukan lokal Anda misalnya
updateFn({msg: "Directive Args"}
.sumber