2014-10-20 13 views
5

Tôi đang tạo mô-đun AngularJs. Điều này là, mô-đun này được giả sử để làm việc với các module khác (giống như một plugin của nó). Vì vậy, về cơ bản tôi sẽ nhập mô-đun này từ mô-đun khác sau này. Tuy nhiên, có một số dịch vụ trong mô-đun này mà tôi muốn ghi đè sau này từ mô-đun nhập mô-đun này. Tôi sẽ làm như thế nào? Có thể chỉ định nghĩa một dịch vụ khác có cùng tên không? Nếu có, tôi sẽ nhận được dịch vụ gốc như thế nào?Overriding AngularJs Service

+3

Bạn đã kiểm tra [ '$ provide.decorator'] (https://docs.angularjs.org/api/auto/service/$ cung cấp # decorator)? – Yoshi

+0

Ah! Điều này sẽ làm. Cảm ơn! – asdacap

Trả lời

3

Ghi đè sẽ xảy ra dựa trên thứ tự diễn giải các mô-đun. Mô-đun cuối cùng được tạo sẽ được ưu tiên hơn các mô-đun với các dịch vụ trùng lặp được tạo trước đó.

SO liên kết liên quan đến không gian tên của dịch vụ: "Namespacing" services in AngularJS

Plunker: http://plnkr.co/edit/P488AkNtGYGUXmo9gIAT?p=preview

var dep1 = angular.module("dep1",[]); 
    var dep2 = angular.module("dep2",[]); 
    var app = angular.module("app",["dep2","dep1"]); 

    dep1.factory("helloSrvc",function(){ 
    return { 
     msg: "hello from dep1" 
    } 
    }); 

    dep2.factory("helloSrvc",function(){ 
    return { 
     msg: "hello from dep2" 
    } 
    }); 

    app.controller("myCtrl", function(helloSrvc,$scope){ 
    $scope.msg = helloSrvc.msg; 
    }); 

    angular.bootstrap(document,["app"]);