AngularJS $ stateProvider加载父模板而不加载子模板

时间:2015-02-11 21:21:15

标签: javascript angularjs angularjs-routing

我刚刚开始迁移到AngularJS,我已经遇到angular-ui/ui-router框架$stateProvider的问题了。这就是我到目前为止所做的:

angular
    .module('testApp', ['ui.router'])
    .config(function($stateProvider, $urlRouterProvider) {
        $urlRouterProvider.otherwise("/index/home");

        $stateProvider
            .state('index', {
                abstract: true,
                url: "/index",
                template: "parent"
            })
            .state('index.home', {
                url: "/home",
                template: "child"
            })
    })
    .controller("MainController", function() {
    })

现在,运行此脚本会将我重定向到http://example.com/#/index/home,但它只会在页面上显示 parent 字符串。未显示字符串。根据我的理解,这应该加载第一个模板,因为我们位于/#/index域部分,然后是第二个,因为我们位于嵌套页面/#/index/home上。

有人可以帮助我并解释为什么这不符合预期吗?

1 个答案:

答案 0 :(得分:4)

在您的父级模板中,您需要另一个<div ui-view></div>才能呈现子状态。

如果您想要多个嵌套视图,则父模板中可以有多个ui-view。你只需要命名它们。例如,

父模板:

<h1>parent</h1>
<div ui-view="child1"></div>
<div ui-view="child2"></div>

您可以按如下方式定义子状态:

$stateProvider
        .state('index', {
            abstract: true,
            url: "/index",
            template: "parent"
        })
        .state('index.home', {
            url: "/home",
            views: {
             'child1': {
               templateURL: "child1.html"
              }
            }
        })
        .state('index.home2', {
          url: '/home2',
          views: {
           'child2': {
             templateURL: 'child2.html'
          }
          }
        })

*注意我使用的是templateURL而不是模板。假设您的应用具有模块化文件结构。