2013-09-24 55 views
2

我使用UI-Router框架的AngularJS爲了呈現嵌套的部分。我在使用子部分渲染父部分時遇到問題。這裏是我的代碼:AngularJS的UI路由器:呈現父子部分與子部分

window.app.config(['$stateProvider', '$urlRouterProvider', 
    function($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/'); 
    $stateProvider 
    .state('class', { 
     url: '/classes/:classId', 
     templateUrl: '/views/class.html', 
     controller: 'ClassCtrl', 
    }) 
     .state('class.questionList', { 
     url: '', 
     templateUrl: '/views/questionList.html', 
     }) 
    }]); 

在我的孩子狀態的聲明,我的URL設置爲空字符串,因此它會在同一時間作爲其父渲染。但是,這不起作用,只有父視圖正在渲染。

回答

2

添加屬性「摘要:真正的」父狀態,通知UI -Router表示只能通過激活子狀態來激活此狀態。這將使URL/classes /:classId激活兩種狀態。

+0

哦,很容易!非常感謝,我一定在文檔中忽略了這一點 – user2066880

1

讓子狀態隱含意味着您想從現有狀態導航到該狀態,並且這應該更新匹配狀態的url。

從您的路線看起來好像你想顯示ui-view的​​,但不希望州變成小孩。最好使用ng-include這將成爲目的很好

在你​​,其中已添加ui-view使用NG-包括

<ng-include src="'/views/questionList.html'"></ng-include> 
+0

我考慮過使用ng-include,但是在不久的將來,我希望能夠動態地用另一個視圖替換子視圖。從我所學到的,我不能用ng-include來做到這一點嗎? – user2066880

+0

你是對的,但是這種狀態觀點的工作原理是,他們也查看url來決定狀態何時改變。看看ui-view文檔,抽象視圖也在那裏,這些可以幫助你。基本上,應該有一種方法可以區分當您僅處於父視圖時還是處於父視圖時。在你的情況下,路由器不能區分。 – Chandermani

+0

ok gotcha。所以我認爲另一種解決方案是將URL傳遞給class.questionList狀態並將原始URL重定向到那個? – user2066880