ui-router Почему родительские состояния должны быть абстрактными

Почему родительские представления должны быть абстрактными, чтобы отображались дочерние представления (вложенные представления)?

$stateProvider
            .state('A', {url: '/A', abstract: true, templateUrl: 'views/A.html'})
            .state('A.B', {url: '', abstract: true, templateUrl: 'views/B.html'})
            .state('A.B.C', {url:'', abstract:false, templateUrl:'views/C.html'});

Родительское представление «A» размещено в home.html следующим образом:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Yomingo</title>
    <link href="lib/bootstrap/css/bootstrap.css" rel="stylesheet"/>
    <link href="lib/bootstrap/css/bootstrap-responsive.css" rel="stylesheet"/>
</head>
<body>
    <div ui-view>
    </div>
<script type="text/javascript" data-main="scripts/main" src="lib/require/require.js"></script>
</body>
</html>

Если какое-либо из родительских состояний «A» или «B» помечено как abstract=false, содержимое пользовательского интерфейса не отображается.


person Mihai H    schedule 03.05.2013    source источник
comment
Предположим, что страница вашего приложения — home.html, а шаблон родительского представления A действительно находится в views/A.html... вы должны поделиться представлениями/A.html и представлениями/B.html, чтобы мы могли видеть, как выглядят дочерние представления. помещаются в родительские представления.   -  person laurelnaiad    schedule 31.05.2013


Ответы (1)


У меня была похожая беда.

Все ваши три состояния используют один и тот же URL, /A:

  • А: '/А'
  • A.B: '/A' + ''
  • A.B.C: '/A' + '' + ''

Поскольку для них определены URL-адреса, текущее состояние будет выбрано на основе вашего текущего URL-адреса. Вы можете находиться только в одном состоянии за раз, поэтому, предположительно, выбранное состояние определяется первым.

Если вы сделаете состояния A и A.B абстрактными, то в них нельзя будет перейти, и поэтому они не будут учитываться при переходе к /A. Таким образом, выбирается A.B.C, наследующий от A.B и A.

Если вы хотите показать больше, чем одно из ваших представлений за раз, я бы порекомендовал прочитать документы для несколько именованных представлений, чтобы упростить отслеживание.

person Andyrooger    schedule 17.07.2013