2015-12-22 27 views
2

我正在使用UI路由器來建立一個應用程序。我需要在一個頁面上有多個視圖,所以我使用抽象狀態。我試圖將參數「isEmbedded」傳遞給owner視圖,但不幸的是它不工作。我想知道是否因爲我將它傳遞給子視圖。當我console.log($stateParams)ownerCtrl中時,它不顯示isEmbedded參數。任何想法爲什麼?通過`參數`爲嵌入式視圖ui路由器

.state('dog', { 
    url: "", 
    parent: "dogAbstract", 
    views: { 
     "owner": { 
      templateUrl: 'client/people/views/owner.ng.html', 
      controller: 'ownerCtrl', 
      params:{ 
       isEmbedded:true 
      } 
     } 
    } 
}) 

P.S.我得到了主意,用params從這樣一個問題:

Angular ui router passing data between states without URL

+0

的'stateParams'屬於國家,不能查看。爲什麼你需要有params' isEmbedded'?應該達到什麼目的? –

+0

如果嵌入,我需要稍微改變所有者視圖。我有時會自己渲染所有者的視圖,有時我會在另一個視圖中呈現它,並且我需要知道它是爲了進行必要的更改。 – user3413723

+0

我會說,最好的是使用'resolve'。我創建了一個例子來證明這一點。好處是,它可以查看(不只是狀態)相關的 –

回答

2

雖然$ stateParams屬於國家,我們可以使用特殊解析一個觀點:

... 
views: { 
    "owner": { 
     templateUrl: 'client/people/views/owner.ng.html', 
     controller: 'ownerCtrl', 
     resolve:{ 
      isEmbedded: function() { return true}, 
     } 
    } 
} 

我這兩個孩子創造an example here各州

.state('parent.child', { 
     url: "/child", 
     templateUrl: 'tpl.html', 
     controller: 'ChildCtrl', 
     resolve: { 
     isEmbedded: function() { return false}, 
     } 
}) 
.state('parent.child2', { 
     url: "/child2", 
     templateUrl: 'tpl.html', 
     controller: 'ChildCtrl', 
     resolve: { 
     isEmbedded: function() { return true}, 
     } 
}) 

和控制器可以使用它:

.controller('ChildCtrl', ['$scope', 'isEmbedded', 
    function ($scope, isEmbedded) { 
    console.log(isEmbedded) 
    } 
]) 

檢查here

+0

甜!有一點解決方法,但它可能是考慮到ui-router當前狀態的最佳方法。可能會花費我幾天的時間來學習足夠的關於ui-router的知識來自己想出這個。謝謝! – user3413723

+0

很高興看到這一點。享受UI路由器;) –

+0

嗨Radim,我遇到了一個問題。如果我沒有在每個包含'owner'的狀態下編寫'resolve'代碼,我會得到'Unknown provider isEmbedded'錯誤。任何方式來解決這個問題,而不寫每個包含所有者的狀態的'resolve'? – user3413723