Saya ingin membuat arahan yang menautkan ke atribut. Atribut menentukan fungsi yang harus dipanggil pada ruang lingkup. Tapi saya juga ingin meneruskan argumen ke fungsi yang ditentukan di dalam fungsi link.
<div my-method='theMethodToBeCalled'></div>
Dalam fungsi tautan, saya mengikat ke acara jQuery, yang meneruskan argumen yang harus saya teruskan ke fungsi:
app.directive("myMethod",function($parse) {
restrict:'A',
link:function(scope,element,attrs) {
var expressionHandler = $parse(attrs.myMethod);
$(element).on('theEvent',function( e, rowid ) {
id = // some function called to determine id based on rowid
scope.$apply(function() {expressionHandler(id);});
}
}
}
app.controller("myController",function($scope) {
$scope.theMethodToBeCalled = function(id) { alert(id); };
}
Tanpa meneruskan id, saya bisa membuatnya berfungsi, tetapi begitu saya mencoba memberikan argumen, fungsi tersebut tidak dipanggil lagi
angularjs-directive
rekna
sumber
sumber
Jawaban:
Solusi Marko bekerja dengan baik .
Untuk membedakan dengan cara Angular yang direkomendasikan (seperti yang ditunjukkan oleh plunkr treeface) adalah dengan menggunakan ekspresi callback yang tidak memerlukan definisi ekspresiHandler. Dalam contoh perubahan marko:
Dalam template
Dalam fungsi tautan direktif
Ini memang memiliki satu kelemahan dibandingkan dengan solusi marko - pada pemuatan pertama fungsiMethodToBeCalled akan dipanggil dengan myParam === undefined.
Contoh yang berfungsi dapat ditemukan di @treeface Plunker
sumber
Hanya untuk menambahkan beberapa info ke jawaban lain - menggunakan
&
adalah cara yang baik jika Anda membutuhkan ruang lingkup yang terisolasi.Kelemahan utama dari solusi marko adalah ia memaksa Anda untuk membuat ruang lingkup terisolasi pada sebuah elemen, tetapi Anda hanya dapat memiliki salah satu dari mereka pada sebuah elemen (jika tidak, Anda akan mengalami kesalahan bersudut: Beberapa direktif [direktif1, direktif2] bertanya untuk ruang lingkup terisolasi )
Ini artinya kamu :
Karena pertanyaan asli menggunakan arahan dengan
restrict:'A'
kedua situasi mungkin cukup sering muncul dalam aplikasi yang lebih besar, dan menggunakan lingkup terisolasi di sini bukanlah praktik yang baik dan juga tidak perlu. Faktanya rekna memiliki intuisi yang baik dalam hal ini, dan hampir berhasil, satu-satunya kesalahan yang dilakukannya adalah memanggil fungsi $ parsed salah (lihat apa yang dikembalikan di sini: https://docs.angularjs.org/api/ ng / service / $ parse ).TL; DR; Kode pertanyaan tetap
dan kodenya
sumber
$parse
.Tidak tahu persis apa yang ingin Anda lakukan ... tetapi berikut adalah solusi yang mungkin.
Buat lingkup dengan properti '&' - dalam lingkup lokal. Ini "menyediakan cara untuk mengeksekusi ekspresi dalam konteks cakupan induk" (lihat dokumentasi direktif untuk detailnya).
Saya juga memperhatikan bahwa Anda menggunakan fungsi penghubung singkat dan memasukkan atribut objek di sana. Kamu tidak boleh melakukan itu. Lebih jelas (imho) hanya mengembalikan objek definisi direktif. Lihat kode saya di bawah ini.
Ini contoh kode dan biola .
sumber
Anda bisa membuat direktif yang menjalankan panggilan fungsi dengan params dengan menggunakan
attrName: "&"
to mereferensikan ekspresi di lingkup luar.Kami ingin mengganti
ng-click
direktif denganng-click-x
:Jika kami memiliki ruang lingkup ini:
Kita bisa menulis arahan kita seperti ini:
Ini adalah demo langsung: http://plnkr.co/edit/4QOGLD?p=info
sumber
Inilah yang berhasil untuk saya.
Html menggunakan direktif
HTML direktif: orderitem.directive.html
Ruang lingkup arahan:
sumber
Solusi saya:
complete
)Pengarahan
Komponen polimer
Halaman
searchData
adalah fungsi kontrolsumber
Ini seharusnya berhasil.
sumber