10

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

$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 内容。

4

1 回答 1

6

我一直有类似的麻烦。

您的三个州都使用相同的 URL,/A:

  • A:'/A'
  • AB : '/A' + ''
  • ABC : '/A' + '' + ''

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

如果您将 A 和 AB 状态抽象化,则它们无法转换,因此在您浏览到 /A 时不会被考虑。因此选择了 ABC,继承自 AB 和 A。

如果您希望一次显示多个视图,那么我建议您阅读文档以获取多个命名视图,以便更容易跟踪。

于 2013-07-17T10:50:34.260 回答