Ionic angular 仅在设备上预加载所有模块
Ionic angular Preload all module only on device
如何在设备上使用preload all策略,在浏览器上使用nopreload?
我们可以像这样加载所有模块:
imports: [
CommonModule,
RouterModule.forRoot(appRoutes, { preloadingStrategy: PreloadAllModules }),
...
],
这将在任何平台上预加载所有模块,
但是我想在浏览器上 运行 时阻止预加载。而且它只能在设备上预加载
Ionic 的 Platform
和 Angular PreloadingStrategy
是可能的。您需要有一个自定义的预加载策略。这是一个按照您的意愿执行的示例策略。
import { Injectable } from '@angular/core';
import { PreloadingStrategy, Route } from '@angular/router';
import { Observable, of } from 'rxjs';
import { Platform } from '@ionic/angular';
@Injectable({
providedIn: 'root'
})
export class LocalOnlyPreloadingStrategy implements PreloadingStrategy {
constructor(private platform: Platform) { }
public preload(route: Route, fn: () => Observable<boolean>): Observable<boolean> {
if (this.platform.is('hybrid')) {
// Running on a device
return fn();
}
// Not running on a device
return of(false);
}
}
您可以像在代码中使用 PreloadAllModules
一样导入和使用。
imports: [
CommonModule,
RouterModule.forRoot(appRoutes, { preloadingStrategy: LocalOnlyPreloadingStrategy }),
...
],
providers: [LocalOnlyPreloadingStrategy]
了解更多信息;
如何在设备上使用preload all策略,在浏览器上使用nopreload? 我们可以像这样加载所有模块:
imports: [
CommonModule,
RouterModule.forRoot(appRoutes, { preloadingStrategy: PreloadAllModules }),
...
],
这将在任何平台上预加载所有模块, 但是我想在浏览器上 运行 时阻止预加载。而且它只能在设备上预加载
Ionic 的 Platform
和 Angular PreloadingStrategy
是可能的。您需要有一个自定义的预加载策略。这是一个按照您的意愿执行的示例策略。
import { Injectable } from '@angular/core';
import { PreloadingStrategy, Route } from '@angular/router';
import { Observable, of } from 'rxjs';
import { Platform } from '@ionic/angular';
@Injectable({
providedIn: 'root'
})
export class LocalOnlyPreloadingStrategy implements PreloadingStrategy {
constructor(private platform: Platform) { }
public preload(route: Route, fn: () => Observable<boolean>): Observable<boolean> {
if (this.platform.is('hybrid')) {
// Running on a device
return fn();
}
// Not running on a device
return of(false);
}
}
您可以像在代码中使用 PreloadAllModules
一样导入和使用。
imports: [
CommonModule,
RouterModule.forRoot(appRoutes, { preloadingStrategy: LocalOnlyPreloadingStrategy }),
...
],
providers: [LocalOnlyPreloadingStrategy]
了解更多信息;