2015-10-06 68 views
1

我無法檢索在Ionic中從ui-router傳遞的參數。 參數傳遞到控制器是不確定的 這是我的國家代碼:

.state('app.dayliston', { 
     cache: false, 
     url: '/myurl', 
     views: { 
     'mainContent': { 
      templateUrl: 'calendar/daylist.html', 
      controller: 'MyCtrl', 
      params : { 'mode':'online'} 
     } 
     } 
    }) 

,這裏是我的控制器代碼:

.controller('MyCtrl', function($scope,$state, $stateParams,CalendarFactory,FBFactory, $ionicHistory,$ionicScrollDelegate,$ionicModal,$ionicPopup, $timeout) { 

     console.log('MyCtrl') 
     console.log('mode'+$stateParams.mode) // mode is undefined 

     .... 

}) 

我使用的是1.6.1。我的代碼有什麼問題嗎?

回答

1

正如我在你的代碼中看到的,你不需要使用$ stateParams,因爲你沒有從URL獲取「mode」參數。

我想連接狀態data將是一個更好的選擇(Docs):

.state('app.dayliston', { 
    cache: false, 
    url: '/myurl', 
    data:{ 
    mode: 'online' 
    }, 
    views: { 
    'mainContent': { 
     templateUrl: 'calendar/daylist.html', 
     controller: 'MyCtrl' 
    } 
    } 
}) 

然後你就可以獲取存儲在狀態中的數據是這樣的:

.controller('MyCtrl', function($scope, $state, $stateParams, CalendarFactory, FBFactory, $ionicHistory, $ionicScrollDelegate, $ionicModal, $ionicPopup, $timeout) { 
    console.log('MyCtrl') 
    console.log('mode'+$state.current.data.mode) // "online" 
}) 
+1

你開車讓我走向正確的方向。我只是將數據移出視圖 – Gyonder

+0

你是對的,我編輯了答案。 – campsjos

0

MyCtrl是您的控制器的實際名稱。這不是傳遞給控制器​​本身的參數。

+0

是的是實際的名字。 console.log('MyCtrl')只是屏幕上的一個打印 – Gyonder

+0

其中.mode是爲$ stateParams定義/設置的? $ stateParams對象存在(所以它被正確注入),但mode屬性不存在。 –

+0

但是我應該在哪裏放置模式屬性?我認爲這足以將它傳遞給像這樣的參數:params:{'mode':'online'} – Gyonder

0

路線:從視圖

.state('app.dayliston', { 
    cache: false, 
    url: '/myurl/:mode', 
    views: { 
    'mainContent': { 
     templateUrl: 'calendar/daylist.html', 
     controller: 'MyCtrl' 
    } 
    } 
}) 

Check URL Routing Query Parameters doc

鏈接:

<a ui-sref="app.dayliston({mode: 'online'});">Go to dayliston</a> 

轉到從控制器州/路線:

$state.go('app.dayliston', {mode: 'online'});