ฉันมีคำสั่งแบบฟอร์มที่ใช้callbackคุณลักษณะที่ระบุกับขอบเขต isolate:
scope: { callback: '&' }
มันอยู่ภายในng-repeatดังนั้นการแสดงออกที่ฉันผ่านรวมถึงidวัตถุที่เป็นข้อโต้แย้งกับฟังก์ชั่นการโทรกลับ:
<directive ng-repeat = "item in stuff" callback = "callback(item.id)"/>
เมื่อฉันทำตามคำสั่งเสร็จแล้วจะเรียกใช้$scope.callback()จากฟังก์ชั่นควบคุม สำหรับกรณีส่วนใหญ่สิ่งนี้เป็นเรื่องปกติและทุกอย่างที่ฉันต้องการจะทำ แต่บางครั้งฉันก็ต้องการที่จะเพิ่มการโต้แย้งจากภายในdirectiveตัวเอง
มีการแสดงออกเชิงมุมที่จะช่วยให้นี้: $scope.callback(arg2)ส่งผลให้callbackถูกเรียกด้วยarguments = [item.id, arg2]?
ถ้าไม่เป็นเช่นนั้นวิธีที่ประณีตที่สุดในการทำเช่นนี้คืออะไร?
ฉันพบว่าใช้งานได้:
<directive
ng-repeat = "item in stuff"
callback = "callback"
callback-arg="item.id"/>
กับ
scope { callback: '=', callbackArg: '=' }
และคำสั่งโทร
$scope.callback.apply(null, [$scope.callbackArg].concat([arg2, arg3]) );
แต่ฉันไม่คิดว่ามันประณีตโดยเฉพาะและเกี่ยวข้องกับการวางสิ่งพิเศษไว้ในขอบเขตไอโซเลท
มีวิธีที่ดีกว่า?
Plunker playground ที่นี่ (เปิดคอนโซล)
ngAPI ตัวอย่างเช่นng-click="someFunction()"นิพจน์ที่ประเมินว่าจะเรียกใช้ฟังก์ชัน
$scope.callbackถูกกำหนดโดยcallback="someFunction"คุณลักษณะและscope: { callback: '=' }คุณสมบัติของวัตถุคำจำกัดความคำสั่ง $scope.callback เป็นฟังก์ชันที่จะเรียกใช้ในภายหลัง ค่าแอททริบิวที่แท้จริงคือสตริง - ซึ่งเป็นกรณีที่มี HTML เสมอ