当前位置: 首页 > 知识库问答 >
问题:

在角度4中为不同页面设置不同布局的最佳方法

龙繁
2023-03-14

我是angular 4的新手。我试图实现的是在我的应用程序中为不同的页面设置不同的布局页眉和页脚。我有三种不同的情况:

  1. 登录,注册页面(无页眉,无页脚)

路由: [“登录”, “注册”]

路线:['','about','contact']

路线:['仪表板','配置文件']

我通过在路由器组件html中添加页眉和页脚来临时运行应用程序

请给我一个更好的方法。

这是我的代码:

   const appRoutes: Routes = [
        { path: '', component: HomeComponent},
        { path: 'about', component: AboutComponent},
        { path: 'contact', component: ContactComponent},
        { path: 'login', component: LoginComponent },
        { path: 'register', component: RegisterComponent },
        { path: 'dashboard', component: DashboardComponent },
        { path: 'profile', component: ProfileComponent },


        // otherwise redirect to home
        { path: '**', redirectTo: '' }
    ];

    export const routing = RouterModule.forRoot(appRoutes);
<router-outlet></router-outlet>
<site-header></site-header>
<div class="container">
    <p>Here goes my home html</p>
</div>
<site-footer></site-footer>
<site-header></site-header>
<div class="container">
    <p>Here goes my about html</p>
</div>
<site-footer></site-footer>
<div class="login-container">
    <p>Here goes my login html</p>
</div>
<app-header></app-header>
<div class="container">
    <p>Here goes my dashboard html</p>
</div>
<app-footer></app-footer>

我在stack-overflow上看到了这个问题,但我没有从答案中获得清晰的图片

共有3个答案

卫诚
2023-03-14

存在布局和共享元素与路由结构不匹配的情况,或者一些元素必须根据每个路由隐藏/显示。对于这种情况,我可以想到以下策略(让我们以< code>app-header-main组件为例,但它显然适用于任何共享页面元素):

您可以提供输入或 css 类来控制共享元素的内部外观,例如:

    < li > <代码>

在路由级别(子级或非子级):

{
  path: 'home',
  component: HomeComponent,
  data: {
    header: {showUserTools: true},
  },
},

并通过Activated Route访问它,如下所示:this.route.data.header.showUserTools

在应用程序标头主组件内部:

< code > @ Input()right side:template ref

输入类型模板参考

<app-header-main [rightSide]="rightside"></app-header-main>
<ng-template #rightside>your content here</ng-template>

您可以创作app-header-main,以便它使用命名的slot transclusion

app-header-main模板内部:

<代码>

用法:

<app-header-main class="no-user-tools">
  <div rightSide>your content here</div>
</app-header-main>

孙明德
2023-03-14

你可以用child例如。

const appRoutes: Routes = [
    { path: '', component: MainComponent,
        children:{
            { path: 'home'  component:HomeComponent},
            { path: 'about', component: AboutComponent},
            { path: 'contact', component: ContactComponent},
               ..others that share the same footer and header...

        }
    },
    { path: 'login', component: LoginComponent },
    { path: 'register', component: RegisterComponent },
    { path: 'admin', component:AdminComponent, 
         children{
            { path: 'dashboard', component: DashboardComponent },
            { path: 'profile', component: ProfileComponent }
               ..others that share the same footer and header...
         }
    }
    { path: '**', redirectTo: '' }
];

MainComponent和AdminComponent类

<app-header-main></app-header-main>
<router-outlet></router-outlet>
<app-footer-main></app-footer-main>

帖子讨论在不同的文件中分离路由

盛浩阔
2023-03-14

您可以使用子路由来解决问题。

在 https://angular-multi-layout-example.stackblitz.io/ 查看工作演示或在 https://stackblitz.com/edit/angular-multi-layout-example 编辑

设置您的路线如下所示

const appRoutes: Routes = [
    
    // Site routes goes here 
    { 
        path: '', 
        component: SiteLayoutComponent,
        children: [
          { path: '', component: HomeComponent, pathMatch: 'full'},
          { path: 'about', component: AboutComponent }
        ]
    },
    
    // App routes goes here
    { 
        path: '',
        component: AppLayoutComponent, 
        children: [
          { path: 'dashboard', component: DashboardComponent },
          { path: 'profile', component: ProfileComponent }
        ]
    },

    // no layout routes
    { path: 'login', component: LoginComponent},
    { path: 'register', component: RegisterComponent },
    // otherwise redirect to home
    { path: '**', redirectTo: '' }
];

export const routing = RouterModule.forRoot(appRoutes);
 类似资料:
  • 我有网格布局。我使用mobile-first方法构建它,这意味着默认情况下(媒体查询之外)所有内容都是针对Mobile的。 桌面布局如下所示: 我有一个“主”内容区域,它被设置为。让我们假装那是网站的首页。 但是,如果我需要在某些页面上的“主”区域稍微窄一点,比如联系人页面,可能是而不是但仍然居中,我该怎么办。 在网格中我有这样的内容: 下面是完整的代码,您可以看到它的工作原理: null nul

  • 我想知道在RecyclerView中实现页脚的正确方法是什么,它可以用来显示不同的视图。下面是几个例子 通过重新加载按钮查看网络错误。 查看从服务器加载数据时的进度条。 当没有更多可用数据时查看。 等等。 我遇到了https://stackoverflow.com/a/29168617/371557,其中提到我必须重写getItemViewType并在onCreateViewHolder中膨胀不同

  • 我目前正在尝试创建一个选项卡视图,其中每个选项卡打开不同的布局。我正在使用android.support.design.widget.TabLayout,并且我使用适配器成功地将其与pagerView链接起来。现在,在myFragment类中,如果我调用onCreateView并膨胀布局,则布局(fragment_main)将显示在所有选项卡中。 我有3个片段连接3个标签。现在如何为每个片段设置不

  • 我有一个Android应用程序与一个布局文件。对于不同的密度,我有不同的布局文件,即,布局hdpi,布局mdpi等。我也有不同的dimens文件在相应的值目录(值mdpi,值hdpi,等)。 我的问题是,我想为4英寸和5英寸屏幕设备使用不同的布局。我在两个物理上测试一个4英寸和一个5英寸,两个设备都使用 /res/layout文件夹的布局和 /res/values-hdpi/文件夹的dimens文

  • 问题内容: 我有称为的布局,并且将方向设置为纵向。我也为Honeycomb设计了这种布局,并将其放置在文件夹中,但是我只想在横向使用 in 。 现在,该怎么办? 谢谢 问题答案: 您可以将其放置在中,然后仅以横向使用。 请参阅支持多屏幕(使用配置限定符) Android支持多个配置限定符,可让您控制系统如何根据当前设备屏幕的特征选择备用资源。配置限定符是一个字符串,您可以将其附加到Android项

  • 问题内容: 是否可以设置和获取布局的Alpha /不透明度及其所有子视图?我不是在说背景。在相对布局中说出视频控件的集合,例如播放,暂停和进度条。 我可以使用动画淡入淡出,但想知道是否可以使用直接方法。 问题答案: 您可以使用持续时间为0的AlphaAnimation和setFillAfter选项在布局及其子级(或其他任何视图)上设置Alpha。 例: 您可以将一个动画用于多个组件以节​​省内存。