การเรียกใช้ฟังก์ชันภายในคำสั่งเชิงมุมและฉีดเหตุการณ์ในพารามิเตอร์

ฉันต้องการความช่วยเหลือจากคุณ.

ฉันมีคำสั่งพร้อมพารามิเตอร์ฟังก์ชัน ( ขอบเขต: { myParam: '@'}) และฉันกำลังส่งพารามิเตอร์ในรูปแบบ HTML เช่น my-param="myFunc(param1, param2)"

มันทำงานได้อย่างสมบูรณ์แบบ แต่ฉันต้องแทรกวัตถุเหตุการณ์เข้าไปในพารามิเตอร์ มีใครรู้ว่าฉันจะทำอย่างไร?

ฉันลองใช้ $provider.annotate และ $provider.instantiate แล้ว แต่มันใช้งานไม่ได้เพราะมันใช้ฟังก์ชันอ้างอิงในคำสั่ง ($a ในกรณีของฉัน) ดังนั้นจึงไม่สามารถรับอาร์กิวเมนต์ของฟังก์ชันได้

มีความคิดอะไรบ้าง?


person ops.rio    schedule 23.10.2013    source แหล่งที่มา


คำตอบ (3)


เมื่อคุณเรียกใช้ฟังก์ชันที่สร้างโดยไวยากรณ์ขอบเขต & แยก คุณสามารถส่งพารามิเตอร์ไปยังฟังก์ชันนั้นเป็นแผนที่ที่มีชื่อได้ หากคำสั่งของคุณถูกกำหนดเช่นนี้:

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

และใช้ดังนี้:

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

... คุณควรเห็นพฤติกรรมที่ต้องการ

person chrisrhoden    schedule 24.10.2013
comment
สวัสดี @chrisrhoden ในกรณีของฉัน ฉันมี div ที่แก้ไขเนื้อหาได้ ดังนั้นฉันจึงสร้างพารามิเตอร์เพื่อทดแทนเหตุการณ์ enter เมื่อพารามิเตอร์นี้ถูกกำหนดไว้ - person ops.rio; 24.10.2013

คำตอบของคริสโรเดนนั้นยอดเยี่ยมมาก ฉันอยากจะแนะนำให้ขยายความเล็กน้อยดังต่อไปนี้ การทำเช่นนี้จะช่วยป้องกันปัญหาการยิงสองครั้งของ ng-click ที่เกี่ยวข้องกับอุปกรณ์มือถือและ/หรือความขัดแย้งของ AngularJS กับ 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});
  });
  }
}
});

พร้อมด้วยมาร์กอัปดังนี้:

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

คุณได้ลองส่งมันในฟังก์ชั่นดั้งเดิมแล้วหรือยัง?

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