2017-08-07 87 views
0

我有這樣的服務:配置中的服務注入。 AngularJS

app.service("UserService", function(){ 

    var userService = {}; 
    userService.userInfo = [ 
     {firstName: "John", lastName: "Doe"}, 
     {firstName: "Carl", lastName: "Smith"} 
     ]; 
    return userService; 
}); 

而且我想把它注入一個的.config定義路由(我使用的UI的路由器其)

app.config(["userService", function($stateProvider, userService){ 
    $stateProvider 
    .state("#",{ 
     templateUrl: "index.html", 
     controller: "UserListController" 
    }) 
    .state('users', { 
     url: '/user/:username', 
     templateUrl: "view/userProfile.html", 
     controller: "UserListController", 
     params: { username: userService.userInfo[0].firstName} 
      }) 
... 

這不是好好工作。任何想法可以注入該服務中的數據以通過.config訪問嗎?

謝謝:)

+0

看到這個https://stackoverflow.com/questions/15937267/inject-service-in-app-config – talentedandrew

+0

也許它只是在你的quetion一個錯字,但你的服務名稱與開始大寫,但是當你包含它時,你忘了這個大寫 – JeanJacques

+0

不,這不是我想的。問題是它似乎無法在params中訪問userService.userInfo [0] .firstName。如果我只是改變它爲一個字符串,它工作得很好 –

回答

0

在配置過程中,你只能訪問提供商,你的情況,你可以在你的app.config注入像這樣訪問UserServiceProvider

app.config(function(UserServiceProvider){ 
    // Config stuffs... 
}) 

隨着此提供商,您可以通過$get()訪問您的服務屬性,例如:

UserServiceProvider.$get().userInfo[0] 

Here是工作plunker

+0

但是我怎樣才能訪問路由的.config文件中的數據呢?主要目標是url將根據用戶名 –

+0

@ N.Car你需要替換'params:{username:userService.userInfo [ 0] .firstName}''by'params:{username:UserServiceProvide r。$ get().userInfo [0] .firstName}'並在配置聲明中包含'UserServiceProvider' – JeanJacques

+0

Works !!!非常感謝你! 所以基本上,當你想要在.config中注入某些東西時,你需要使它成爲一個提供者,然後使用$ get()來獲得它裏面的東西? –

0

注射用AngularJS,如果你想給你要注入的名字,你需要給所有的名字,您宣佈它以同樣的方式。

在這種情況下:

app.config(["$stateProvider", "UserService", function($stateProvider, userService){ 
+0

我剛剛添加它,但它仍然無法正常工作。我認爲他不認可這個userService.userInfo [0] .firstName作爲一個字符串。如果我將它改爲{username:「click me」},那麼它工作得很好 –

+0

不,實際上,當我如你所說的那樣吸引userService時,它不起作用。 { app。配置([ 「$ stateProvider」, 「userService」,功能($ stateProvider,userService){$ stateProvider .STATE( 「#」,{ templateUrl: 「的index.html」, 控制器: 「UserListController」 }) .STATE( '用戶',{ 網址: '/用戶/:用戶名', templateUrl: 「視圖/ userProfile.html」, 控制器: 「UserListController」, PARAMS:{用戶名: 「按我」} } –

0

常量是在兩個配置階段和運行階段注射:

app.constant("UserConstant", { 
    userInfo:[ 
     {firstName: "John", lastName: "Doe"}, 
     {firstName: "Carl", lastName: "Smith"} 
    ] 
}); 

從文檔:

常數(名稱,值);

$injector註冊常量服務,例如字符串,數字,數組,對象或函數。像value一樣,不可能將其他服務注入常量中。

但不同於value,恆定可注入一個模塊配置功能(見angular.Module),它不能由AngularJS decorator覆蓋。

Angular $provider API Reference - constant

+0

謝謝!它也有效!我仍然在學習AngularJS,不知道常量。肯定會看到它:) –