คุณยังสามารถใช้บริการ $ inject เพื่อรับบริการที่คุณต้องการ ฉันพบว่ามีประโยชน์หากฉันไม่ทราบชื่อบริการล่วงหน้า แต่รู้ว่ามีส่วนต่อประสานบริการ ตัวอย่างเช่นคำสั่งที่จะเสียบตารางเข้ากับจุดสิ้นสุด ngResource หรือปุ่มลบบันทึกทั่วไปซึ่งโต้ตอบกับจุดสิ้นสุด api ใด ๆ คุณไม่ต้องการใช้คำสั่งตารางอีกครั้งสำหรับทุกคอนโทรลเลอร์หรือแหล่งข้อมูล
template.html
<div my-directive api-service='ServiceName'></div>
my-directive.directive.coffee
angular.module 'my.module'
.factory 'myDirective', ($injector) ->
directive =
restrict: 'A'
link: (scope, element, attributes) ->
scope.apiService = $injector.get(attributes.apiService)
ตอนนี้บริการ 'ไม่ระบุชื่อ' ของคุณพร้อมให้บริการแล้ว หากเป็นเช่น ngResource คุณสามารถใช้อินเตอร์เฟส ngResource มาตรฐานเพื่อรับข้อมูลของคุณ
ตัวอย่างเช่น:
scope.apiService.query((response) ->
scope.data = response
, (errorResponse) ->
console.log "ERROR fetching data for service: #{attributes.apiService}"
console.log errorResponse.data
)
ฉันพบว่าเทคนิคนี้มีประโยชน์มากเมื่อสร้างองค์ประกอบที่โต้ตอบกับจุดสิ้นสุด API โดยเฉพาะ