首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将角度视图包含在具有相同控制器的另一个视图中?

如何将角度视图包含在具有相同控制器的另一个视图中?
EN

Stack Overflow用户
提问于 2017-05-10 17:23:16
回答 1查看 208关注 0票数 0

如何将多个“子”视图放入角1中的“父”视图?我认为它与UI路由器的"多名称视图“相关,但我没有看到指定父视图的方法。(该链接中的示例假定所有容器都在index.html中。)

下面是一个简化的示例:

代码语言:javascript
复制
$stateProvider.state('frame', {
    url: '/frame',
    template: '<div ui-view></div>'
}).state('frame.page', {
    url: '/frame/page',
    controller: 'page-controller',
    templateUrl: 'views/page.html', // see below
    views: {
        aside: {
           templateUrl: 'views/page-aside.html'
        },
        thing: {
           templateUrl: 'views/page-thing.html'
        }
    }
}) // ... etc ... lots of other states built off of "frame"

其中page.html包含大量内容,包括一些用于子视图的容器:

代码语言:javascript
复制
<div ui-view="aside"></div>
<div ui-view="thing"></div>
EN

回答 1

Stack Overflow用户

发布于 2017-05-10 20:38:02

例如,当您需要控制一个状态的多个出口时,您可以使用多个视图,例如,如果您想更改每个状态的备用状态。

您不能按您建议的方式执行,因为ui-router不允许您在使用视图时使用模板,因为它会影响父状态。当前状态表示每个视图(多个或单个<div ui-view/> )的配置。

可用的解决方案是使用包含声明的ui-view="myView"的状态的嵌套状态。每个子状态都将设置父集上的所有视图。

片段波纹管实现了一个简单的nav /节/旁白布局,其中有两个实现多视图控件的状态。

代码语言:javascript
复制
angular.module('app', ['ui.router'])
  .config(function($stateProvider, $urlRouterProvider) {

    $urlRouterProvider.otherwise('/frame/page/thing');

    $stateProvider
      .state('frame', {
        url: '/frame',
        template: `
          <div ui-view></div>
        `,
      }).state('frame.page', {
        url: '/page',
        template: `
          <nav>
            <a ui-sref="frame.page.thing" ui-sref-active="active">Things</a>
            <a ui-sref="frame.page.stuff" ui-sref-active="active">Stuff</a>
          </nav>
          <section ui-view="thing"></section>
          <aside ui-view="aside"></aside>
        `,
      }).state('frame.page.thing', {
        url: '/thing',
        views: {
          aside: {
            template: `
              <h2>Aside</h2>
              Aside for things
            `
          },
          thing: {
            template: `
              <h2>Page things</h2>
            `
          }
        }
      })
      .state('frame.page.stuff', {
        url: '/thing',
        views: {
          aside: {
            template: `
              <h2>Aside</h2>
              Aside for stuff
            `
          },
          thing: {
            template: `
              <h2>Page Stuff</h2>
            `
          }
        }
      });
  });
代码语言:javascript
复制
* {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  -ms-box-sizing: border-box;
  box-sizing: border-box;
}

body {
  margin: 0;
  padding: 0;
}

nav {
  width: 100%;
  display: block;
  padding: 10px;
  border: 1px solid gray;
}

nav a:hover {
  color: gray;
}

nav a.active {
  color: blue;
}

nav a {
  color: black;
  padding: 10px;
  font-family: Verdana;
}

section,
aside {
  height: 100%;
  display: block;
  float: left;
  border: 1px solid gray;
  padding: 10px;
}

aside {
  width: 25%;
}

section {
  width: 75%;
}
代码语言:javascript
复制
<div ng-app="app">
  <div ui-view></div>
</div>


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-router/1.0.3/angular-ui-router.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43899052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档