2014-12-31 19 views
5

tôi đã xác định một dịch vụ như thế này:tiêm có điều kiện của một dịch vụ trong AngularJS

angular.module('myApp').service('myService', [ 
'$rootScope', 
... 
... 

Tôi muốn dịch vụ của tôi được khởi tạo chỉ dành cho người dùng mới (ví dụ: khi user.createdAt> ngày nay).

Vậy là có một cách để có điều kiện tiêm dịch vụ của tôi hoặc ít nhất là phá hủy dịch vụ của tôi mà không cần bất kỳ tác dụng phụ nếu người dùng là một cũ.

Trả lời

7

Bạn có thể sử dụng dịch vụ $injector để có được tiêm-ibles động nếu bạn cần phải:

app.controller('DemoCtrl', function($injector) { 
    this.clicky = function() { 
    myFact = $injector.get('myFactory'); 
    myFact(); 
    }; 
}); 

app.factory('myFactory', function() { 
    return function() { 
    alert('foobar!'); 
    }; 
}); 

Đây là bản trình diễn đang chạy đầy đủ: http://jsbin.com/bemakemaja/1/edit

$injector docs: https://docs.angularjs.org/api/auto/service/$injector

Như một hướng dẫn chung mặc dù tôi khuyên bạn không nên thiết kế các dịch vụ của bạn như vậy chỉ đơn giản là tiêm chúng có tác dụng phụ.

0

sử dụng factory thay vì service, do đó bạn có thể có một số logic kiểm tra trong dịch vụ của bạn

angular.module('myApp').factory('myService', function() { 

    if (newUser) { 
     return { // your service implementation here 
     } 
    } 
    return undefined; 
}; 
0

Vì vậy, có cách để điều kiện dịch vụ của tôi hoặc ít nhất là phá hủy dịch vụ của tôi mà không có bất kỳ tác dụng phụ nào nếu người dùng cũ.

tốt nhất để nắm bắt logic này bên trong dịch vụ:

class Service{ 
    static $inject = ['$rootScope']; 
    constructor($rootScope){ 
     if (user.createdAt > today){ /*something*/ } 
     else {/*other thing*/} 
    } 
} 

Chú ý: Dịch vụ là độc thân tiêm nên có điều kiện không nhìn thấy như một giải pháp mong muốn. Cũng để tìm hiểu về $ tiêm: https://www.youtube.com/watch?v=Yis8m3BdnEM

Các vấn đề liên quan