2015-02-11 31 views
1

我的路線是這樣的:我可以有一個使用ui-router的索引的子狀態嗎?

$stateProvider.state('repository', { 
    url: '/:host/:owner/:repository', 
    views: { 
    appView: { 
     templateUrl: '/templates/app/repository.html' 
    } 
    } 
}).state('repository.analytics', { 
    views: { 
    repositoryView: { 
     templateUrl: '/templates/app/_repositoryAnalytics.html' 
    } 
    } 
}).state('repository.commit', { 
    url: '/:host/:owner/:repository/commit/:commitHash', 
    views: { 
    repositoryView: { 
     templateUrl: '/templates/app/_repositoryCommit.html' 
    } 
    } 
}).state('repository.file', { 
    url: '/file?path', 
    views: { 
    repositoryView: { 
     templateUrl: '/templates/app/_repositoryFile.html' 
    } 
    } 
}); 

我想對所有repository樣態的基本URL,這就是爲什麼我指定url那裏。舉個例子,如果我沒有這樣做,我將不得不指定一切,因爲它在commit狀態中顯示。這是冗長的,而不是我想要做的事情。

所以是有可能有一個repository孩子default狀態,以便如果有人針對存在,則該子視圖負荷?

**更新** 這似乎工作得很好,如果我點擊應用程序,但如果我直接去/:host/:owner/:repository URL,子視圖(分析)從不加載。

回答

1

我不知道您是否可以擁有默認的子狀態,但是您可以在該父狀態下設置子視圖。就像這樣:

$stateProvider.state('repository', { 
    url: '/:host/:owner/:repository', 
    views: { 
     appView: { 
     templateUrl: '/templates/app/repository.html' 
     }, 
     '[email protected]': { // it means the repositoryView of repository state. 
     templateUrl: '/templates/app/_repositoryAnalytics.html'  
     } 
    } 
    }) 

然後,當你與存儲庫狀態或URL打開,分析頁面將在回購頁面repositoryView視圖加載。

[已更新] 此格式的'repositoryView @ repository'意思是說,視圖'repositoryView'在狀態'repository'中。因爲您嘗試使用默認子視圖打開狀態「存儲庫」。 'repository.html'中定義了子視圖'repositoryView'。如果你沒有設置狀態範圍,ui-router會認爲子視圖'repositoryView'屬於'repository'的父視圖。

我不知道我是否解釋清楚,你可以檢查ui-router wiki

+0

作品!但爲什麼我需要執行'repositoryView @ repository'?只做'repositoryView'不起作用 – Shamoon 2015-02-11 14:18:52

+0

請檢查我的更新。 – Mavlarn 2015-02-13 06:17:54

1

我創建working plunker here。一種方法可以是使用事件觸發強制轉到child狀態,當選擇(從網址解析)

.run(['$rootScope', '$state', '$stateParams', 
    function($rootScope, $state, $stateParams) { 

    $rootScope.$on('$stateChangeStart', function(event, toState, toPrams) { 
     if (toState.name === "repository") { 
     event.preventDefault(); 
     $state.go('repository.analytics', toPrams); 
     } 
    }); 
    } 
]) 

檢查它here

約重定向其他一些主題父 - 小孩:

相關問題