AngularJS - 单个模板中的多个ng视图

Jay*_*ram 131 angularjs ng-view

我正在使用AngularJS构建一个动态Web应用程序.是否可以ng-view在单个模板上使用多个?

pas*_*ine 99

你可以只有一个ng-view.

您可以通过多种方式改变其内容:ng-include,ng-switch或者通过routeProvider映射不同的控制器和模板.

  • 如何动态更改窗口小部件的内容?您不想为窗口小部件和窗口小部件的控制器以及窗口小部件的模型创建视图吗? (9认同)

Mor*_*yae 39

UI-Router是一个可以提供帮助的项目:https://github.com/angular-ui/ui-router 其中一个功能是多个命名视图

UI-Router有许多功能,如果您正在使用高级应用程序,我建议您使用它.

在此处查看多个命名视图的文档.

  • 不幸的是,ui-router自述文件说:注意:UI-Router正在积极开发中.因此,虽然此库经过了充分测试,但API可能会发生变化.只有在您熟悉更改日志并相应更新使用情况时,才考虑在生产应用程序中使用它. (6认同)

Tek*_*ekz 19

我相信你可以通过单身来实现它ng-view.在主模板中,您可以有ng-include子视图的部分,然后在主控制器中为每个子模板定义模型属性.这样它们就会自动绑定到ng-include各个部分.这与多个相同ng-view

您可以查看文档中给出的示例ng-include

在示例中,当您从下拉列表中更改模板时,它会更改内容.这里假设您有一个main ng-view,而不是通过选择下拉手动选择子内容,而是在加载主视图时执行.

  • 如果没有像UI-Router这样的解决方案,ng-include确实是一个可行的替代方案,正如您所解释的那样.ng-include无法实现的是URL(状态)驱动的多视图,$ route无法根据当前URL动态呈现不同的视图.我们可以通过在控制器中使用自定义逻辑来扭转Angular的臂,并使其成为可能,例如`ng-include` [文档]中的示例(https://docs.angularjs.org/api/ng/directive/ngInclude) ,但它不是理想的应用程序架构模式,UI-Router是正确的解决方案类型. (2认同)

Łuk*_*man 13

使用常规ng-view模块,您不能拥有多个动态模板.

但是,这个项目可以让你这样做(寻找ui-router).

  • angular-ui在(近)未来似乎是一个不错的选择,但对于生产使用它似乎仍然非常不稳定 (3认同)

Far*_*eri 8

可以有多个或嵌套的视图.但不是通过ng-view.

angular中的主路由模块不支持多个视图.但你可以使用ui-router.这是第三方模块,您可以通过Github,angular-ui/ui-router,https://github.com/angular-ui/ui-router获取.目前正在开发新版本的ngRouter(ngNewRouter).目前不稳定.所以我为你提供了一个简单的ui-router启动示例.使用它可以命名视图并指定应该使用哪些模板和控制器来渲染它们.使用$ stateProvider,您应指定应如何为特定状态呈现视图占位符.

<body ng-app="main">
    <script type="text/javascript">
    angular.module('main', ['ui.router'])
    .config(['$locationProvider', '$stateProvider', function ($locationProvider, $stateProvider) {
        $stateProvider
        .state('home', {
            url: '/',
            views: {
                'header': {
                    templateUrl: '/app/header.html'
                },
                'content': {
                    templateUrl: '/app/content.html'
                }
            }
        });
    }]);
    </script>
    <a ui-sref="home">home</a>
    <div ui-view="header">header</div>
    <div ui-view="content">content</div>
    <div ui-view="bottom">footer</div>
    <script src="bower_components/angular/angular.js"></script>
    <script src="bower_components/angular-ui-router/release/angular-ui-router.js">
</body>
Run Code Online (Sandbox Code Playgroud)

您需要为此示例引用angularjs和angular-ui.router.

$ bower install angular-ui-router
Run Code Online (Sandbox Code Playgroud)