Memanggil fungsi di dalam arahan sudut dan menyuntikkan acara ke dalam parameter

Saya membutuhkan bantuan Anda.

Saya memiliki arahan dengan parameter fungsi ( scope: { myParam: '@'}). Dan saya meneruskan parameter dalam HTML, seperti my-param="myFunc(param1, param2)"

Ini bekerja dengan sempurna. Tapi, saya perlu memasukkan objek acara ke dalam parameter. Adakah yang tahu bagaimana saya bisa melakukan itu?

Saya mencoba $provider.annotate dan $provider.instantiate, tetapi tidak berhasil karena menggunakan fungsi referensi dalam direktif. ($a dalam kasus saya), sehingga tidak bisa mendapatkan argumen fungsi.

ada ide?


person ops.rio    schedule 23.10.2013    source sumber


Jawaban (3)


Saat Anda memanggil fungsi yang dibuat oleh sintaks cakupan & isolasi, Anda dapat meneruskan parameter ke fungsi tersebut sebagai peta bernama. Jika arahan Anda didefinisikan seperti ini:

scope: { myParam: '&' },
link: function (scope, el) {
  el.on('click', function (e) {
    scope.myParam({$event: e});
  });
}

dan digunakan seperti ini:

<my-directive my-param="console.log($event)"></my-directive>

... Anda akan melihat perilaku yang diinginkan.

person chrisrhoden    schedule 24.10.2013
comment
Hai @chrisrhoden, dalam kasus saya, saya memiliki div dengan konten yang dapat diedit, jadi, saya membuat parameter untuk menggantikan acara enter ketika parameter ini ditentukan - person ops.rio; 24.10.2013

jawaban Chrisrhoden bagus sekali. Saya menyarankan untuk memperluasnya sedikit dengan yang berikut ini. Melakukan hal ini akan membantu mencegah masalah pemicuan ganda ng-klik yang berkaitan dengan perangkat seluler dan/atau konflik AngularJS dengan jQuery.

myApp.directive('responsiveClick', function(){
  return {
    scope: { myCb: '&' },
    link: function (scope, el,attr) {
  el.bind('touchstart click', function (e) {
    e.preventDefault();
    e.stopPropagation();
    scope.myCb({$event: e});
  });
  }
}
});

beserta markupnya sebagai berikut:

<a class="mdi-navigation-cancel" my-cb="removeBasketItem($event,item)" responsive-click></a>
person Jared Conti    schedule 14.04.2015

sudahkah Anda mencoba meneruskannya ke fungsi aslinya?

my-param="myFunc($event, param1, param2)"
person user2643882    schedule 23.10.2013