2016-06-15 83 views
1

假設只有一個工廠(共享服務)的模塊。如何在不使用共享服務的控制器上使用共享服務?

angular.module('sharedService', []) 
    .factory('sharedSrv', sharedService) 

function sharedService() { 
    var number; 

    return { 
    getNum: getNumber 
    }; 

    function getNumber() { 
    return number; 
    } 

    function setNumber(i) { 
    number = i; 
    } 
} 

我看到了,我們可以通過傳遞依賴到模塊

angular.module('app', ['sharedService']) 
.controller('theCtrl', function(sharedSrv) { 
    var self = this; 

    self.setSharedNumber = sharedSrv.setNumber; 
} 

然而,如何從自己的模塊注入,如果控制器使用的服務共享服務注入共享的服務?

angular.module('app', ['sharedService']) 
.controller('theCtrl', theCtrlFun) 
.service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
// How call sharedService ? 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

謝謝你的幫忙。

回答

2

你不應該注射服務模塊變量定義DI,你需要通過模塊的名稱爲string

angular.module('app', [sharedService]) 
.controller('theCtrl', function(sharedSrv) { 

應be

angular.module('app', ['sharedService']) 
.controller('theCtrl', function(sharedSrv) { 

或者你可以遵循DI

的內聯陣註釋
angular.module('app', ['sharedService']) 
.controller('theCtrl', ["sharedSrv", function(sharedSrv) { 
    //code here 
}]); 
+0

感謝您的糾正。但在你的最後一塊,如果這個服務在另一個應用程序模塊中,「sharedSrv」將會被識別出來嗎? –

+0

@MatthieuLobry,這是錯字,謝謝你擡頭,我已經修復它.. –

1

從聲明angular.module('app', [sharedService])中刪除sharedService,因爲您的共享服務不是本模塊的一部分。

你需要注入theSrv而不是theSrvFun在聲明中theCtrlFun.$inject = ['theSrv']

theCtrlFun功能只需要調用該服務的方法。 e.g someMethod是在theSrv服務定義,你需要這樣的

theSrv.someMethod(); 

例如調用

angular.module('app', []) 
    .controller('theCtrl', theCtrlFun) 
    .service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
    theSrv.someMethod(); // calll in this way 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

其更好地利用Array Annotation

angular.module('app', []) 
    .controller('theCtrl', ['theSrv', function(theSrv) { 

     theSrv.callMe(); 

    }]) 
    .service('theSrv', function() { 

     this.callMe = funtion() { 


     } 

    }) 
+0

謝謝你的幫助我取得了語法有效的許多錯誤。 但我想同時在同一個controllerm中使用sharedService和TheSrv。 (Srv將包含僅用於Ctrl的工具,但其他模塊將使用sharedService)。 –

0

試試這個:

angular.module('app', []) 
.controller('theCtrl', theCtrlFun) 
.service('theSrv', theSrvFun) 

theCtrlFun.$inject = ['theSrv'] 

function theCtrlFun(localSrv) { 
// How call sharedService ? 
console.log(localSrv) 
} 

function theSrvFun() { 
    // Some fantastic features. 
} 

plnkr:http://plnkr.co/edit/lSosJbYfG6tuF4pCXYqR?p=preview

+0

謝謝你,我犯了錯誤。 但是,如果我想在同一個控制器中使用SRV和sharedService,我該怎麼辦? –

+0

要使用其他模塊的服務,您需要將該模塊注入您的模塊,然後將該模塊的服務注入您的控制器 –