これを行う方法はいくつかあります。
メインテンプレートで共通のものを共有する必要がない場合は、2つの状態(ネストされていない状態)を使用してURL main
とmain/detail
にマッピングしてください。州名にドットが含まれていない限り、ネスティングはありません。
メインと共通のテンプレートを詳細状態で共有する場合は、ネストを使用できます。非常に簡単な方法は、別のui-viewディレクティブと2つのネストされた(子)状態empty
とwith
を含むプレースホルダdivを持つ(抽象的な)メインステートを持つことです。これらの子ステートは、メインテンプレートにレンダリングするテンプレートを提供できます。したがって、empty
の場合、テンプレートは空にすることができます(空の文字列ではなく、何かでなければなりません)。
angular
.module('main')
.config(function ($stateProvider) {
$stateProvider
.state('main', {
url: '/main',
abstract: true,
template: '<div>some stuff possibly here: <div ui-view></div></div>'
})
.state('main.empty', {
url: '',
template: ' ' // cannot be empty string
})
.state('main.detail', {
url: '/detail',
template: '<div>the details</div>'
});
});
あなたのリンクは、その後、URLがちょうど/main
になる場合でも、状態名としてmain.empty
を対象としなければならないことに注意してください。
3番目のオプションは、ui-view
という名前を使用し、複数のビューにstuffを割り当ててコンテンツを制御することもできます。しかし、これは非常に扱いにくいものになることがあります。それは、それぞれの状態ごとにui-view
という名前の最初のものを参照する必要があります。また、あなたが言及したネストされたコンテンツもサポートしていません。