【问题标题】:@angular/router wrap route component in router-outlet for styling@angular/router 在 router-outlet 中包装路由组件以进行样式设置
【发布时间】:2019-10-24 11:48:45
【问题描述】:

我有一个简单的角度 (8+) 应用程序,使用 @angular/router 和多个组件作为路由,每个组件都使用 @angular/animations 进行转换。

<router-outlet> 指令是全屏使用 css width: 100vwheight: 100vh 覆盖默认滚动。我的想法是用<div> 或允许定义固定布局的特定类来包装每条路线。

我当前的版本运行良好,但我必须手动添加<div>,并希望找到一个自动解决方案,就像@angular/animations 一样。

带有主路由器的app.ts

  <main [@routerTransition]="getState(o)">
    <router-outlet #o="outlet"></router-outlet>
  </main>

路由组件html模板

<div class="route"> <!-- ???? class which should be automatically wrapped -->
  <div class="container">
    <h1>title</h1>
    <p>Blablabla</p>
  </div>
</div>

路线

// State is use to bind animation
export const appRoutes: Routes = [
  {
    path: 'page1',
    loadChildren: () => import('./page1/page1.module').then(mod => mod.Page1Module),
    data: { theme: 'light' }
  },
  {
    path: 'page2',
    loadChildren: () => import('./page2/page2.module').then(mod => mod.Page2Module),
    data: { theme: 'light' }
  },
  ...
];

就像我说的,这段代码工作完全符合预期,但必须手动维护某个 DOM 布局还不够好。

【问题讨论】:

    标签: angular angular-router angular-animations


    【解决方案1】:

    内容投影将完成这项工作。基本上你有一个外壳/包装器组件。并且你所有的单独路由组件都会将它们的内容投射到这个 shell/wrapper 中。

    RouteShell 组件:

    <div class="route">
        <ng-content></ng-content>
    </div>
    

    RouteA 组件:

    <div class="container">
        <h1>title</h1>
        <div>...</div>
    </div>
    

    主要

    <app-route-shell>
        <router-outlet></router-outlet>
    </app-route-shell>
    

    【讨论】:

    • 这样的接缝会产生类似&lt;div class="route"&gt;&lt;router-outlet&gt;&lt;/router-outlet&gt;&lt;/div&gt;的东西...据我了解&lt;router-outlet&gt;&lt;/router-outlet&gt;将页面添加为Sibling本身,所以我需要&lt;router-outlet&gt;&lt;/router-outlet&gt;&lt;div class="route"&gt;&lt;!--RouteAComponent--&gt;&lt;/ng-content&gt;&lt;/div&gt;。可能对 内容投影 感到困惑,可能是 ...
    • 位置并不重要。 只是一个锚元素,不会影响 html 结构。
    • 检查我的 dom 时,我可以看到所有路由都显示在 之后,所以如果我有两条路由进行转换,我的 DOM 中将有:&lt;app-route-shell&gt; &lt;router-outlet&gt;&lt;/router-outlet&gt;&lt; Route 1/&gt;&lt;Route 2/&gt;&lt;/app-route-shell&gt;。我需要它&lt;app-route-shell&gt; &lt;router-outlet&gt;&lt;/router-outlet&gt;&lt;div class="Route"&gt;&lt; Route 1/&gt;&lt;/div&gt;&lt;div class="Route"&gt;&lt;Route 2/&gt;&lt;/div&gt;&lt;/app-route-shell&gt;?。抱歉,我的问题可能不是很干净。
    • 如果是这种情况,我倾向于将&lt;div class="route"&gt; 设为路由,然后将其路由到带有标题的每个单独组件。这不是一个好主意。大声笑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2017-03-28
    相关资源
    最近更新 更多