在使用Angular懒加载时,确实可能会破坏骨架加载动画。这是因为懒加载将模块划分为多个小块,而骨架加载动画通常是在整个页面加载完成之前显示的。
然而,我们可以通过一些技巧来解决这个问题,下面是一个示例解决方案:
/* skeleton-loader.component.css */
.skeleton-loader {
/* Skeleton styling */
}
// skeleton-loader.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-skeleton-loader',
templateUrl: './skeleton-loader.component.html',
styleUrls: ['./skeleton-loader.component.css']
})
export class SkeletonLoaderComponent { }
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { SkeletonLoaderComponent } from './skeleton-loader.component';
const routes: Routes = [
{
path: 'lazy',
loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule),
data: { skeleton: SkeletonLoaderComponent } // Add skeleton component as route data
}
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
ActivatedRoute
服务来获取路由数据,并根据该数据判断是否显示骨架加载组件。// lazy.component.ts
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
@Component({
selector: 'app-lazy',
templateUrl: './lazy.component.html',
styleUrls: ['./lazy.component.css']
})
export class LazyComponent implements OnInit {
showSkeleton: boolean;
constructor(private route: ActivatedRoute) { }
ngOnInit() {
this.showSkeleton = this.route.snapshot.data['skeleton']; // Check if skeleton component should be shown
}
}
showSkeleton
变量来决定是否显示骨架加载组件。
通过以上的解决方案,我们可以在懒加载模块加载完成之前显示一个骨架加载组件,从而保持骨架加载动画的连续性。请根据实际情况进行调整和扩展。