2015-06-20 53 views
4

我得到了兩種方法意想不到的結果。

我有我的$狀態的ConfigEd

$stateProvider 
       .state('status', { 
        url: "/status/:payment", 
        controller: 'QuestCtrl', 
        templateUrl: "index.html" 
       }); 

並基於控制器我有:

angular.module('quest').controller('QuestCtrl',function($scope,$stateParams,$state){ 

    console.log($stateParams.payment); // undefined 

    console.log($state); // Object {params: Object, current: Object, $current: extend, transition: null} 

} 

我已經使用$ stateParams在其他項目和它的工作,但現在我無法弄清楚這裏發生了什麼......

+1

看看你忘了$ http:P ['$ scope','$ http','$ stateParams','$ state',函數($ scope,$ http,$ stateParams,$ state) – squiroid

+1

什麼是瀏覽器地址欄中的URL? –

+0

夥計們,這是如此尷尬,但我試圖添加$ stateParams只是爲了得到一個額外的參數,所以我忘了將添加到我的HTML。所以現在我正在使用$位置 - 簡單。抱歉的傢伙..謝謝你的答案@ jb-nizet,@ squiroid,@ thomas-weglinski –

回答

4
 ['$scope','$stateParams','$state', 
function($scope, $http,   $stateParams, $state) 

服務的名稱與變量不匹配。

因此,$ http實際上是$ stateParams服務,$ stateParams實際上是$ state服務,而$ state是未定義的。

我的建議:停止使用這種數組符號,這會使代碼混亂,並且是錯誤的常見來源。相反,使用ng-annotate作爲構建過程的一部分,它將爲你正確地做到這一點。

+1

我已經評論過了:) – squiroid

+0

@ jb-zinet我會看看ng-annotate,謝謝你的提示!雖然我確定了訂單,但我仍然得到相同的結果。 –

+0

編輯您的問題並添加一個包含新的更新代碼的部分。 –

4

正如我已經評論上面你忘注入$ http服務

angular.module('quest').controller('QuestCtrl', 
['$scope','$http','$stateParams','$state',function($scope,$http,$stateParams,$state){ 

console.log($stateParams); // Empty Object 
console.log($stateParams.payment); // Empty Object 

console.log($state); // I get the entire state, I can see that my params are there. 

console.log($state.params); 
} 

所以你的參數不匹配,它原來你會得到$ stateparms $狀態和$狀態是空的。 和$ HTTP保持$狀態:P

希望它能幫助:)

+0

我修正了它的順序,但我仍然得到相同的結果。 因爲您之前聲明瞭它,所以我不知道該命令對控制器很重要。 –

+0

嘿,你可以複製它在猛擊? – squiroid

1

隨着NG-註釋庫,控制器也可以發起這樣的:

angular.module('quest') 
    .controller('QuestCtrl', function ($scope,$http,$stateParams,$state) { 

}); 

在這種情況下,你是避免注入對象排序的問題。看看:https://github.com/olov/ng-annotate

如果您正在使用Grunt構建您的應用程序,請使用:grunt-ng-annotate包。

0

召喚 'ngInject' 構造函數($範圍,與無,$ stateParams,$狀態,$ SCE){ 'ngInject'

0

在routes.js

我的例子缺少參數:

.state('menu.cadastroDisplay', { 
    url: '/page9', 
    views: { 
     'side-menu21': { 
     templateUrl: 'templates/cadastroDisplay.html', 
     controller: 'cadastroDisplayCtrl' 
     } 
    }, 
    params: { 'display': {} } 
    }) 

在路由中沒有這個參數$ stateParams.yourParam總是返回undefined。