У меня есть один родительский вид и много дочерних представлений. Можно ли указать состояние для одного из этого ребенка как для внука, но без указания текущего дочернего имени в состоянии и как?
Итак, в моей конфигурации я хочу иметь что-то вроде этого:
.state("parent", {
url: "" // Resulting url is /
})
.state("parent.child", {
url: /ChildUrl // Resulting url is /ChildUrl/
})
.state("parent.{some param}.grandchild", {
url: "" // Resulting url is /ChildUrl/
})
ИЛИ Как изменить одно дочернее представление на другое без изменения URL-адреса в браузере без решения внука?
Итак, наконец, решила его с удалением параметра url
в конфигурации состояний для родительского представления и дочернего представления, которое можно было бы представить в качестве grandchild
. Он работает так, что мне нужно
Используйте внутри родительского шаблона.
<div class="parentTemplate">
<h1>Parent Title</h1>
<ui-view></ui-view>
</div>
шаблон child1:
<div class="child1Template">
<h1>Child1 Title</h1>
</div>
шаблон child2:
<div class="child2Template">
<h1>Child2 Title</h1>
</div>
Конфигурация состояния:
.state("parent", {
url: "",
templateUrl: "templates/parent-template.html"
})
.state("parent.child1", {
templateUrl: "templates/child1-template.html"
})
.state("parent.child2", {
templateUrl: "templates/child2-template.html",
params: { 'child2Param': 'Default' }
})
Переход к parent.child1 или parent.child2 будет выполняться, но директива <ui-view>
будет заполнена соответствующими дочерними шаблонами. Вам не нужен URL-адрес для перехода между состояниями. Внесите $ state в контроллер с навигацией и используйте $state.go('parent.child1')
. Если вам нужно передать параметры, определите их в свойстве params в каждом состоянии и вызовите изменение состояний с помощью $state.go('parent.child2', {'child2Param', someObject.withDynamicValue }.
$state.go