ui-router为什么父状态必须是抽象的

时间:2013-05-03 16:19:14

标签: angularjs angularjs-routing

为什么父视图必须是抽象的才能呈现子视图(嵌套视图)?

$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,则不会呈现ui-view内容。

1 个答案:

答案 0 :(得分:6)

我遇到过类似的麻烦。

您的三个州都使用相同的网址/ A:

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

由于他们定义了URL,因此将根据您当前的URL选择当前状态。您一次只能处于一种状态,因此可能选择的状态是首先定义的状态。

如果你使A和A.B状态为抽象,那么它们就无法转换为,因此当您浏览到/ A时将不会考虑它们。因此选择A.B.C,继承自A.B和A.

如果您希望一次显示更多其中一个观点,那么我建议您阅读multiple named views的文档,以便更容易跟踪。