在Angular 8中使用共享组件进行延迟加载

莫雷布兰卡

我只是找不到这个问题的答案。我正在使用导航栏做一个简单的主页,但是我将导航栏添加为共享组件,因此可以在其他组件中重用它。

问题是,当我尝试转到使用导航栏延迟加载的新路由时,导航栏无法加载该路由。

这是我的代码:

-版本:

Angular CLI: 8.2.2
Node: 10.13.0
OS: win32 x64
Angular: 8.2.8
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.802.2
@angular-devkit/build-angular     0.802.2
@angular-devkit/build-optimizer   0.802.2
@angular-devkit/build-webpack     0.802.2
@angular-devkit/core              8.2.2
@angular-devkit/schematics        8.2.2
@angular/cli                      8.2.2
@ngtools/webpack                  8.2.2
@schematics/angular               8.2.2
@schematics/update                0.802.2
rxjs                              6.4.0
typescript                        3.5.3
webpack                           4.38.0

app.html:

<router-outlet></router-outlet>

app.component.ts:

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  title = 'dashboard-syngenta';
}

app.module.ts:

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';


@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

app-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';


const routes: Routes = [
  { path: '', loadChildren: './login/login.module#LoginModule'}
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

login.component.html

<div class="loginContainer">


            <div class="row">
                <div class="col-12 text-center">
                    <button class="btn btn-submit" type="button" routerLink="home">Ingresar</button>
                </div>
            </div>

</div>

login.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.scss']
})
export class LoginComponent implements OnInit {

  constructor() { }

  ngOnInit() {
  }

}

login.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { LoginComponent } from './login.component';
import { Routes, RouterModule } from '@angular/router';

const routes: Routes = [
  { path: '', component: LoginComponent },
  { path: 'home', loadChildren: '../home/home.module#HomeModule' }
];

@NgModule({
  declarations: [LoginComponent],
  imports: [
    CommonModule,
    RouterModule.forChild(routes)
  ]
})
export class LoginModule { }

主页HTML:

<div class="homeContainer">
    <!-- Sidebar  -->
    <div class="navbar">
        <app-navbar></app-navbar>

    </div>

    <!-- Page Content  -->
    <div id="content">

        <router-outlet></router-outlet>

    </div>

</div>

HomeComponent.ts

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-home',
  templateUrl: './home.component.html',
  styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit {


  constructor() { }

  ngOnInit() {
  }

}

HomeModule.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { HomeComponent } from './home.component';
import { Routes, RouterModule } from '@angular/router';
import { SharedModule } from '../shared/shared.module';

const routes: Routes = [
  { path: '', component: HomeComponent }
];

@NgModule({
  declarations: [HomeComponent],
  imports: [
    CommonModule,
    RouterModule.forChild(routes),
    SharedModule
  ]
})
export class HomeModule { }

navbar.component.html

<div class="wrapper">
    <!-- Sidebar  -->
    <nav id="sidebar" [ngClass]="{'active': toggleActive}">
        <div class="sidebar-header">
            <h3>Syngenta Admin</h3>
            <strong>SA</strong>
        </div>

        <ul class="list-unstyled components">
            <li routerLink="home" routerLinkActive="active">
                <a href="#homeSubmenu">
                    <i class="fa fa-home"></i>
                    Home
                </a>
            </li>
            <li routerLink="usuarios" routerLinkActive="active">
                <a href="#">
                    <i class="fa fa-user" aria-hidden="true"></i>
                    Usuarios
                </a>
            </li>
            <li routerLink="productos" routerLinkActive="active">
                <a href="#pageSubmenu">
                    <i class="fa fa-truck"></i>
                    Productos
                </a>
            </li>

        </ul>

    </nav>
</div>

navbar.component.ts

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-navbar',
  templateUrl: './navbar.component.html',
  styleUrls: ['./navbar.component.scss']
})
export class NavbarComponent implements OnInit {

  toggleActive = true;

  constructor() { }

  ngOnInit() {
  }

  activeSidebar() {
    this.toggleActive = !this.toggleActive;
  }

}

shared.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { NavbarComponent } from './navbar/navbar.component';
import { RouterModule, Routes } from '@angular/router';

const routes: Routes = [
  { path: 'home', loadChildren: '../home/home.module#HomeModule' }
];

@NgModule({
  declarations: [NavbarComponent],
  imports: [
    CommonModule,
    RouterModule.forChild(routes)
  ],
  exports: [NavbarComponent]
})
export class SharedModule { }

然后单击导航栏内的routeLink后,route说是/#homeSubmenu。

在此处输入图片说明

然后:

在此处输入图片说明

我不确定我是否正确实现了延迟加载。我真的很感谢任何建议。

弗洛雷斯杰夫

您对延迟加载的安排不合适,我建议您不要在侧边栏使用共享模块,而应将其放在home组件中,并将其原始路由更改为默认路由。因此,这是您的全局父组件。然后使用子组件懒加载。

要使用您的登录模块,请使用保护程序将其重定向到本地延迟加载路由中。

编辑1:顺便说一句,您的锚点有问题,每个链接中都有一个href

 <li routerLink="home" routerLinkActive="active">
    <!-- Here is your error for the submenu -->
   <a href="#homeSubmenu">
     <i class="fa fa-home"></i>
        Home
    </a>
 </li>

看看这个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Angular Dart组件中使用Bootjack组件

来自分类Dev

在angular2中使用动态组件加载程序?

来自分类Dev

使用选择器在Angular 2中动态加载组件

来自分类Dev

延迟加载不加载模块-Angular 8

来自分类Dev

在Angular 8中使用@Input的问题

来自分类Dev

Angular 8延迟加载。有关以下方面的问题:进口,进口组件和提供者

来自分类Dev

在angular 8中使用ngModel和ngModelOption进行表单验证

来自分类Dev

如何使用延迟加载仅加载angular 8中的模块

来自分类Dev

如何在Angular 9中使用“懒加载”使用子组件的事件属性绑定父组件

来自分类Dev

在Angular 9中的组件之间共享数据

来自分类Dev

TailwindCSS在Angular(延迟加载)子组件中不起作用

来自分类Dev

在Angular 6中使用延迟加载时,路由不适用于其他路由

来自分类Dev

我应该在Angular的可重用组件中使用EventEmitter还是共享服务?

来自分类Dev

如何在Angular 8中使用对象模拟数组数据以进行单元测试

来自分类Dev

Angular 10延迟加载不会重定向到组件

来自分类Dev

在从外部JSON文件构造的模板中使用延迟加载的Angular 2组件

来自分类Dev

有没有办法在 angular 2 dart 中延迟加载组件?

来自分类Dev

Angular 4 共享组件在每次加载时创建新实例

来自分类Dev

在 Angular2 中使用事件发射器在服务和组件之间共享数据

来自分类Dev

如何在 angular 中使用动态加载的模块组件中的现有组件

来自分类Dev

在 angular-2 中动态创建延迟加载的组件

来自分类Dev

延迟加载 Angular 2 组件缓存问题

来自分类Dev

Angular,在延迟加载的模块中暴露组件

来自分类Dev

Angular 1 组件延迟加载请求错误

来自分类Dev

Angular 5 - 组件在延迟加载模块中不可用

来自分类Dev

Angular 6 使用延迟加载访问父组件的子组件时的意外行为

来自分类Dev

Angular 8 CLI:如何使用提供程序延迟加载不可路由的功能模块

来自分类Dev

Angular 延迟加载组件错误错误:找不到“默认”

来自分类Dev

Angular 中的延迟加载样式

Related 相关文章

  1. 1

    在Angular Dart组件中使用Bootjack组件

  2. 2

    在angular2中使用动态组件加载程序?

  3. 3

    使用选择器在Angular 2中动态加载组件

  4. 4

    延迟加载不加载模块-Angular 8

  5. 5

    在Angular 8中使用@Input的问题

  6. 6

    Angular 8延迟加载。有关以下方面的问题:进口,进口组件和提供者

  7. 7

    在angular 8中使用ngModel和ngModelOption进行表单验证

  8. 8

    如何使用延迟加载仅加载angular 8中的模块

  9. 9

    如何在Angular 9中使用“懒加载”使用子组件的事件属性绑定父组件

  10. 10

    在Angular 9中的组件之间共享数据

  11. 11

    TailwindCSS在Angular(延迟加载)子组件中不起作用

  12. 12

    在Angular 6中使用延迟加载时,路由不适用于其他路由

  13. 13

    我应该在Angular的可重用组件中使用EventEmitter还是共享服务?

  14. 14

    如何在Angular 8中使用对象模拟数组数据以进行单元测试

  15. 15

    Angular 10延迟加载不会重定向到组件

  16. 16

    在从外部JSON文件构造的模板中使用延迟加载的Angular 2组件

  17. 17

    有没有办法在 angular 2 dart 中延迟加载组件?

  18. 18

    Angular 4 共享组件在每次加载时创建新实例

  19. 19

    在 Angular2 中使用事件发射器在服务和组件之间共享数据

  20. 20

    如何在 angular 中使用动态加载的模块组件中的现有组件

  21. 21

    在 angular-2 中动态创建延迟加载的组件

  22. 22

    延迟加载 Angular 2 组件缓存问题

  23. 23

    Angular,在延迟加载的模块中暴露组件

  24. 24

    Angular 1 组件延迟加载请求错误

  25. 25

    Angular 5 - 组件在延迟加载模块中不可用

  26. 26

    Angular 6 使用延迟加载访问父组件的子组件时的意外行为

  27. 27

    Angular 8 CLI:如何使用提供程序延迟加载不可路由的功能模块

  28. 28

    Angular 延迟加载组件错误错误:找不到“默认”

  29. 29

    Angular 中的延迟加载样式

热门标签

归档