Đưa một dịch vụ vào một dịch vụ khác trong angleJS


Câu trả lời:


118

Đúng. tuân theo quy tắc tiêm thông thường trong anglejs.

app.service('service1', function(){});

//Inject service1 into service2
app.service('service2',function(service1){});

Cảm ơn @simon. Tốt hơn là sử dụng Array injection để tránh vấn đề thu nhỏ.

  app.service('service2',['service1', function(service1) {}]);

20
Tôi đề nghị sử dụng cách tiêm mảng để tránh vấn đề khi bạn sẽ muốn rút gọn kịch bản của bạn trong tương lai:['service1', function(service1) {}]
Simon Belanger

2
Bạn cũng có thể sử dụng ngminhoặc tác vụ grunt liên quan.
John Ledbetter

nếu bạn muốn truy cập một phương thức khác từ cùng một dịch vụ, tôi cho rằng bạn sẽ không muốn đưa cùng một dịch vụ vào dịch vụ; Tuy nhiên, cố gắng gọi nó bằng cách sử dụng 'this' dường như không hiệu quả với tôi, bất kỳ suy nghĩ nào về cách tốt nhất để làm điều đó? cảm ơn!
timhc22

Chỉ cần tự hỏi điều gì sẽ xảy ra nếu bạn tiêm 'service1' vào 'service2', và cũng tiêm 'service2' vào 'service1', điều gì sẽ xảy ra sau đó? Điều gì sẽ xảy ra nếu sự khởi tạo của một dịch vụ phụ thuộc vào sự khởi tạo của dịch vụ khác?
Xinan

@Xinan trong trường hợp đó anglejs sẽ đưa ra lỗi phụ thuộc theo chu kỳ. Vì vậy, tránh nó và bất cứ điều gì không phải là một thực hành lập trình tốt.
jitenagarwal 19

8

Đúng. Như thế này (đây là một nhà cung cấp, nhưng điều tương tự cũng áp dụng)

    module.provider('SomeService', function () {


    this.$get = ['$q','$db','$rootScope', '$timeout', 
                function($q,$db,$rootScope, $timeout) {
          return reval;
    }
    });

Trong ví dụ này, $dblà một dịch vụ được khai báo ở nơi khác trong ứng dụng và được đưa vào $getchức năng của nhà cung cấp .


5

Để tránh nhầm lẫn, tôi nghĩ cũng cần nhắc lại rằng nếu bạn đang sử dụng bất kỳ dịch vụ nào khác (ví dụ: $ http, $ cookies, $ state) trong childService của bạn, thì bạn cũng cần phải khai báo chúng một cách rõ ràng.

ví dụ

function() {
  var childService = function($http, $cookies, parentService) {

  // Methods inherited
  this.method1Inherited = parentService.method1();
  this.method2Inherited = parentService.method2();

  // You can always add more functionality to your child service

  angular.module("app").service("childService", ["$http", "$cookies", "parentService", childService]);

}());

Bạn có thể khai báo các dịch vụ mà bạn đang sử dụng bên trong con mình trong một mảng và sau đó chúng được đưa vào tự động hoặc tiêm chúng riêng biệt với chú thích $ injection:

childService.$inject = ["$http", "$cookies", "parentService"]; 
angular.module("app").service("childService ", childService );
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.