2015-09-18 98 views
2

在這裏,我試圖發送一個對象$state並在$stateParams中檢索它。我認爲我做得很對,也見過很多網站和很多要求這樣做的文章。但是我無法在下一個Controller中使用$stateParams

我知道有很多這方面的問題,我經歷了很多。我仍然陷入困境。 有人可以看到我錯了嗎?

$scope.setup = function (ev, item, parent) { 
      console.log("event", ev); 
      console.log("item", item); 
      console.log("parent in clusters", parent); 

      ev.preventDefault(); 
      if(item!==null){ 
      var path = parent.id + '.' + item.code; 
      path = path.replace(/\s+/g, '').toUpperCase();; 
      if (!$(ev.target).closest('a').is('[disabled]')) { 
       $rootScope.child = item; 
       $rootScope.parent = parent; 
       console.log("parent", $rootScope.parent); 
       $state.go('setup', { 
        targetYear: $scope.targetYear, 
        path: path 
        // ,'child': item, 
        // 'parent': parent 

       }); 
      } 
      } 
      else { 
       console.log("trade in trade", parent); 
       console.log("items from scope", $scope.items); 
       var path = parent.name.trim(); 
       path = path.replace(/\s+/g, '').toUpperCase(); 
       var totalTradesInOverview = $scope.items; 
       console.log("parent", $rootScope.parent); 
       $state.go('setup', { 
        targetYear: $scope.targetYear, 
        path: path, 
        params: totalTradesInOverview 


       }); 

      } 
     }; 

我想我應該直接在$stateParams在另一個控制器。我錯了嗎?

下面是我的國家聲明的一部分,如果該事項很多:

由國家明確預期
module.config(function ($stateProvider) { 
     $stateProvider.state('setup', { 
      url: '/setup/:targetYear/:path', 
      views: { 
       "[email protected]": { 
        controller: 'TargetsSetupController as model', 
        templateUrl: 'app/targets/setup/setup.tpl.html', 
        // params: params 
        //I tried even this passing that variable in params like // params: totalTradesInOverview                    
       }, 
       "[email protected]": { 
        controller: 'AController', 
        templateUrl: 'comments.tpl.html' 
       } 
      } 
      } 
     }); 
    }); 
+0

什麼是您的控制檯錯誤?您是否還有一個github回購協議,用於完整查看您的代碼? –

+0

首先確認。執行$ state.go()時,您正在設置變量。 –

+0

您是否使用$ stateParams獲取「params」值或「params」,「path」和「targetYear」值 –

回答

2

參數只有通過$stateParams訪問。

在您的示例中,您的"setup"狀態聲明具有以下URL:'/setup/:targetYear/:path',這意味着它預計參數爲targetYearpath

您正試圖傳遞第三個參數(params),並且它不可見,因爲它不是預期的。

要傳遞的第三個參數,你可以在你的國家聲明中的特殊params對象聲明它,有一些默認值(注意命名衝突 - 也許這是你的問題的根源?):

$stateProvider.state('setup', { 
    url: '/setup/:targetYear/:path', 
    views: {...}, 
    params: { 
     params: [] 
    } 
}); 

現在params參數應該在$ stateParams中可見。

如果我是你,我會在上面的狀態聲明和$state.go聲明中將params改爲totalTradesInOverview以避免混淆。

另請參閱$stateProvider.state documentation瞭解更多選項,您可以將其應用於傳遞的參數。

+0

您指示在狀態定義中傳遞一個param對象。但是我想通過$ state.go()中的控制器傳遞它。我在我的控制器的某個地方得到了這個對象,然後我必須將它傳遞給下一個控制器。 你打算如何保持它在狀態定義已經。我想我沒有跟着你。你能解釋一下嗎? –

+0

首先,只需將您的狀態定義更改爲我提供的狀態(我忽略了視圖部分)並檢查它是否有效。如果是這樣,我會試着解釋更多。 – DzinX

+0

此外,從您的問題的評論我可以看到你期望的參數實際上被稱爲'totalTradesInOverview'。然後,你應該在狀態('params:{totalTradesInOverview:[]}')和state.go中命名它:''state.go('setup',{targetYear:$ scope.targetYear,path:path ,totalTradesInOverview:totalTradesInOverview})' – DzinX