16

Tôi đang cố gắng để đạt được một cấu trúc chương trình như thế này:Làm thế nào để "háo hức tải" một dịch vụ trong AngularJS? (Khởi tạo nó trước khi cần thiết của nó, tự động)

enter image description here

Vấn đề ở đây là, khi không có điều khiển rõ ràng bằng cách sử dụng tính năng trong đầu, chúng không được khởi tạo và không được đăng ký trong FeatureRegistry, do đó chúng không thể hiển thị trong Chế độ xem. Nhưng những gì tôi muốn là đạt được là chúng hiển thị trong khung nhìn, sau đó có mẫu được tải thông qua ng-include và sau đó trong mẫu có bộ điều khiển cụ thể cho mỗi feauture. Các bộ điều khiển này là các bộ điều khiển đang sử dụng các tính năng.

Các tính năng cơ bản chỉ có ở đó để nói về vị trí của các mẫu và biểu tượng, sử dụng, và cũng để bắt đầu tính năng.

Nhưng quay lại câu hỏi ban đầu của tôi:
Làm thế nào để khởi tạo dịch vụ ngay cả khi họ không cần thiết vào lúc này?

Hoặc có chức năng nào khác mà tôi có thể sử dụng cho dịch vụ thay vì dịch vụ không? Tôi cũng muốn nếu bạn chỉ cho tôi điều đó sau đó :)

Trả lời

21

Bạn có thể yêu cầu nó trong phần run của ứng dụng của bạn, vòi phun sẽ gọi nó.

angular.module("myApp", []). 
    factory("EagerService", function() { 
     console.log("I'm ready."); 
    }). 
    run(function (EagerService) { 
     console.log("EagerService is ready."); 
    }); 

Tuy nhiên, theo như tôi hiểu, bạn có con/bộ điều khiển phụ cần số này EagerService. Tại sao bạn không tiêm nó ở đó?

+0

Chúng phải được bao gồm trước tiên, bởi 'FeatureViewController' .. anh ta được cho là bao gồm các mẫu trong giao diện với các bộ điều khiển – JustGoscha

+0

Cảm ơn btw, đã làm việc tốt ngay bây giờ! :) – JustGoscha

+0

Nếu bạn sử dụng một webpack, bạn cần phải có ít nhất một dòng mã bên trong chạy, bởi vì webpack không nhập vào chức năng nếu không có mã ở đó. Vì vậy, trong trường hợp của tôi, tôi sử dụng 'return;' thay vì 'console.log' – bora89

5

(Vì điều này tương đối cũ - câu trả lời này dành cho người đọc trong tương lai - nhưng tôi đã vấp phải câu hỏi này để có thể người khác cũng vậy) Nếu bạn sử dụng nhà cung cấp/khối cấu hình - chúng được thực hiện háo hức, vì vậy tốt hơn là nên háo hức mã khởi tạo ở đó. Bạn đang/có lẽ đang suy nghĩ về các dịch vụ/khối chạy.

Để chứng minh với mã, cảnh báo này sẽ không bật (giả sử myServiceModule là một module ứng dụng của bạn phụ thuộc vào và myService không được tiêm bất cứ nơi nào):

angular.module('myServiceModule', []).service('myService', function() { 
    alert("service"); 

    // service 
    return {}; 
}); 

Tuy nhiên cảnh báo này sẽ bật ngay cả khi không có ai là tùy thuộc vào myProvider dịch vụ:

angular.module('myProviderModule', []).provider('myProvider', function() { 
    alert("provider"); 

    // Define your service here. Can be an array of inject-ables 
    // instead of a function. 
    this.$get = function() { 
     // service 
     return {}; 
    }; 
}); 

Bạn có thể thấy điều này trong hành động trong plunker này.

Đọc thêm về các nhà cung cấp trong tài liệu chính thức here.