2015-11-30 98 views
0

所以我試圖從url參數中拉出一些id注入從子狀態到控制器的解析提供程序

這裏是我的狀態:

$stateProvider 
    .state('parent', { 
     url: '/parent', 
      templateUrl: 'path/to/parent.html', 
      controller: 'lolController' 
     }) 
    .state('parent.child', { 
     url: '/child-profile/:id', 
     templateUrl: 'path/to/child.html', 
     resolve: { 
      someId: function ($stateParams) { 
       // I cant print the id from here 
       console.log("PARAMS", $stateParams.id) 
       return $stateParams.id; 
      } 
      }, 
    }) 

控制器

.controller('lolController', 
    ['$scope', 'someId', function ($scope, someId) { 

    $scope.someId = someId; 

}]) 

但每當我試圖訪問URL /parent/child-profile/123abc我得到錯誤Unknown provider: someIdSee error here.

我該如何解決這個問題?謝謝。

編輯

Jay Shukla提供的答案幫助我得到了這個想法。

parameterundefined,因爲我在實際調用包含來自它的url的值的子狀態之前在父狀態中聲明瞭控制器。這是我提出的一個簡單的解決方案,在Jay Shukla的幫助下。

$stateProvider 
    .state('parent', { 
     url: '/parent', 
      templateUrl: 'path/to/parent.html', 
     }) 
    .state('parent.child', { 
     url: '/child-profile/:id', 
     templateUrl: 'path/to/child.html', 
     controller: 'lolController' 
    }) 

我刪除從父狀態controller聲明,並將其轉移到孩子的狀態。因爲在我的情況下,父母國家的模板只包含<div ui-view></div>

的理念是:

惟一狀態是嵌套但兩者HTML是分開的,以便控制器型號不會被繼承 - 傑伊舒克拉

每個國家都可以有自己的控制器。

請添加/編輯更多以改善此問題。

回答

3

嘗試注入$stateParams然後您將在該對象中獲得id。

像這樣

.controller('lolController', 
    ['$scope', '$stateParams', function ($scope, $stateParams) { 

    $scope.someId = $stateParams.id; 

}]) 

您也可以定義不同的方式您的參數如下

url: '/child-profile/:id', // Inside stateparams you will get id as key 
OR 
url: '/child-profile/{id}', 
OR 
url: '/child-profile/:{id:int}', // Id with integer value 
+0

它說不確定。 :( – CENT1PEDE

+0

什麼是你的網址,什麼是完整的錯誤 –

+0

我試過所有3種方式,都是'undefined'。/順便我訪問URL'/ parent/child-profile/5 ampl3' – CENT1PEDE

相關問題