Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Angular2 PreloadingStrategy不工作

Angular2 PreloadingStrategy不工作
EN

Stack Overflow用户
提问于 2016-11-03 18:27:49
回答 2查看 4.6K关注 0票数 1

我试图了解这个自定义路径预压是如何在angular2中工作的。但我一开始就不能让它发挥作用。

这是我的密码

custom.preloading-strategy.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export class CustomPreloadingStrategy implements PreloadingStrategy {
    preload(route: Route, fn: () => Observable<any>): Observable<any> {
        console.log("Preloading...");
        return Observable.of(true).delay(1000).flatMap(_ => fn());
    }
}

app.routes.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const appRoutes: Routes = [
    {
        path: '',
        redirectTo: 'home',
        pathMatch: 'full',
        data: {
            preload: true
        }
    },
    {
        path: 'home',
        component: HomeComponent,
        data: {
            preload: true
        }
    }
];

export const appRoutingProviders: any[] = [
    CustomPreloadingStrategy
];

export const routeComponents: any[] = [
    HomeComponent
];

export const routing = RouterModule.forRoot(appRoutes, {
    preloadingStrategy: CustomPreloadingStrategy,
    useHash: true
});

app.module.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@NgModule({
    bootstrap: [AppComponent],
    providers: [appRoutingProviders, appServices],
    imports: [
        BrowserModule,
        FormsModule,
        HttpModule,
        routing
    ],
    declarations: [
        AppComponent,
        SharedComponents,
        appDirectives,
        routeComponents,
        NewsMediaListComponent
    ],
    entryComponents: [AppComponent]
})

deps

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"@angular/common": "2.1.2",
"@angular/compiler": "2.1.2",
"@angular/core": "2.1.2",
"@angular/forms": "2.1.2",
"@angular/http": "2.1.2",
"@angular/platform-browser": "2.1.2",
"@angular/platform-browser-dynamic": "2.1.2",
"@angular/router": "3.1.2",
"rxjs": "5.0.0-rc.1",

但是,日志中没有错误或任何内容。我不知道我在这里错过了什么。

EN

回答 2

Stack Overflow用户

发布于 2016-11-04 00:08:55

延迟加载只适用于模块。

因此,如果您只在路由中使用HomeComponent作为组件,则这是行不通的。您应该为(app.routing.ts):创建自己的模块,并在路由HomeComponent中使用loadChildren,而不是组件-属性。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    path: 'home',
    loadChildren: './../home/home.module#HomeModule',
    data: { preload: true }
}

在单独的文件(home.module.ts):中创建另一个模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { NgModule, Component } from '@angular/core';
import { HomeComponent } from './home.component';
import { routing } from './home.routing';

@NgModule({
    imports: [
        routing
    ],
    declarations: [
        HomeComponent
    ]
})
export class HomeModule { }

并为此组件(home.routing.ts):创建路由文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { HomeComponent } from './home.component';
import { RouterModule, Routes } from '@angular/router';
import { ModuleWithProviders } from '@angular/core';

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

export const routing: ModuleWithProviders = RouterModule.forChild(
    homeRoutes
);

data: { preload: true }只能在具有属性loadChildren的路由上使用。您仍然可以为任何其他路由设置数据属性,但它与延迟加载本身无关。

您应该阅读这个写得很好的关于延迟加载模块的维克托·萨夫金文章

更新的回答:我还看到data: { preload: true }不能工作,因为您需要在您的自定义预加载策略中处理这个问题,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export class SelectedPreloadingStrategy implements PreloadingStrategy {
    preload(route: Route, load: Function): Observable<any> {
        return route.data && route.data['preload'] ? load() :  Observable.of(null);
    }
 }

您还需要做的是导出此预加载策略,以便在providers数组中的app.module中使用该策略:

app.routing.ts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export const APP_ROUTES_MODULE_PROVIDER = [SelectedPreloadingStrategy];

并在app.module.ts中导入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { routing, APP_ROUTES_MODULE_PROVIDER } from './app.routing';

@NgModule-providers-数组:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
providers: [
    ...
    APP_ROUTES_MODULE_PROVIDER
],

如果每件事都正确编译,并且您在应用程序中路由到惰性加载模块,那么您应该检查开发人员工具的Network-Tab,并且只有在您导航到模块之后,路由器才会加载该模块。

票数 2
EN

Stack Overflow用户

发布于 2016-11-04 01:01:33

您希望以只预加载所选模块的PreloadAllModules模块策略的方式定义您的策略。因此,您应该在路由中正确使用loadChildren,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export const appRoutes: Routes = [
    {
        path: '',
        redirectTo: 'home',
        pathMatch: 'full'
    },
    {
        path: 'home',
        loadChildren: './app/home.module#HomeModule',
        data: {
          preload: true
        }
    }
];

另外,请再次查看自定义预加载,以及在这里中创建自定义预加载策略的示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40414366

复制
相关文章
Windows凭据不工作
如果不是敲错IP、用户名、密码,报凭据不工作,一般情况下执行这几句命令后重启远程服务就正常了
Windows技术交流
2021/06/15
6.1K0
RDP你的凭据不工作/RDP密码不刷新
如果你不属于上述的情况,请查看:https://learn.microsoft.com/zh-cn/windows-server/remote/remote-desktop-services/troubleshoot/rdp-error-general-troubleshooting#check-whether-a-group-policy-object-gpo-is-blocking-rdp-on-a-local-computer
阿龙w
2022/12/02
12.7K0
RDP你的凭据不工作/RDP密码不刷新
angular2 路由问题
Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'main' 这个问题的处理很简单,是路由的路径写错了, import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import {loginComponent} from './login/login.component'; impor
杭州前端工程师
2018/06/15
1.2K0
Angular2入门体验
好的工具往往使得开发应用更快更简单,而不是任何模块都手动开发。angualr cli就是一个支持 创建工程,添加文件,对各种任务如测试、打包、部署等迭代。 本文的目的就是基于TypeScript开发构建一个angualr应用,使用angualr cli可以选择工程的风格。 在本章的 末尾,你可以理解CLI的开发以及开发完整应用的样例。 也可以通过这个链接直接下载源码。 第一步,配置环境变量 在开始开发前,需要安装nodejs。 点击这个网址,Nodejs安装文件下载 在命令行中,执行: sudo npm i
用户1154259
2018/04/17
1.6K0
Angular2 之 Animations
Angular2的动画系统赋予了制作各种动画效果的能力,致力于构建出与原生CSS动画性能相同的动画。 Angular2的动画主要是和@Component结合在了一起。 animations元数据属性在定义@Component装饰。就像template元数据属性!这样就可以让动画逻辑与其应用代码紧紧集成在一起,这让动画可以更容易的出发与控制。 使用要点 Angular2的动画是使用<u>模型驱动</u>的方式在两个状态之间进行转换,是由状态和状态之间的转场效果所定义的。 动画被定义在@Compone
贺贺V5
2018/08/21
1.9K0
Angular2 之 Animations
128 天不上班不工作:照样领工资 9.5 万
原告:北京和风畅想科技有限公司 被告:杜某,男,1988年出生 和风畅想公司向法院提出诉讼请求: 1、判决无须撤销《解除劳动关系通知书》,双方无需继续履行劳动合同; 2、判决和风畅想公司无须向杜某支付自2020年2月29日至2020年7月5日期间工资收入损失95172.41元。 事实和理由: 2020年11月2日,和风畅想公司收到北京市朝阳区劳动人事争议仲裁委员会作出的京朝劳人仲字[2020]第16281号裁决书(以下简称“第16281号裁决书”),和风畅想公司不服该裁决。 不服裁决理由: 一、第1628
云头条
2022/10/09
2.2K0
128 天不上班不工作:照样领工资  9.5 万
Angular2 路由跳转
1.通过ts来实现 //EmailComponent import { Component, OnInit} from '@angular/core'; //route是ActivatedRoute的实例,使用需要导入ActivatedRoute import {Router,ActivatedRoute} from '@angular/router'; @Component({ selector: 'app-email', templateUrl: './email.componen
用户1437675
2019/05/15
2.7K0
Angular 启用预加载
在使用路由延迟加载中,我们介绍了如何使用模块来拆分应用,在访问到这个模块的时候, Angular 加载这个模块。但这需要一点时间。在用户第一次点击的时候,会有一点延迟。
玖柒的小窝
2021/11/03
1.5K0
Angular 启用预加载
Angular2 @NgModule
@NgModule修饰的class。 @NgModule利用一个元数据对象来告诉Angular如何去编译和运行代码。 一个模块内部可以包含组件、指令、管道,并且可以将它们的访问权限声明为公有,以使外部模块的组件可以访问和使用到它们。 模块是用来组织应用的,通过模块机制外部类库可以很方便的扩展应用,Angular2将许多常用功能都分配到一个个的模块中,如:FormModule、HttpModule、RouterModule。
用户1437675
2018/08/20
2.1K0
Angular2学习笔记
阴差阳错,当初在选择写网站的时候选择了使用Angular2+RESTfull,现在想起来,这个选择可能有点轻率了。虽然这套框架我个人觉得可能的确比较适合做移动端Web的开发,但是由于网站开发的经验明显不足,加上这套技术还不是相当的成熟,在学习的过程中走了很多的弯路。而且,功利一点的讲,对于找工作的帮助可能并不是很大,很多Web相关的职务招的都是Java方向的,而我直接跳过这种传统框架直接接触新知识难免会发现基础不牢的情况。不过还好,经过这一段时间的倒腾,好歹把Angular2的东西稍微消化了一点,相比啥都不会,也算是有点收获吧。
mythsman
2022/11/14
2K0
Angular2 @Component
它的配置更简单一些,非常适合组件化的app架构。使用web组件和使用Angular风格的app架构使得编写app更为简便。
用户1437675
2018/08/20
5360
Angular2入坑指南
序 对后端开发来说,前端是神秘的,眼花缭乱的技术,繁多的框架,出名的不出名的好几百种,看是“繁荣”,其实显得杂乱无章,但是我们在做开发的时候,技术选型还是主流的那么几个:浅析angular,react,vue.js Node.js。 node 官网:https://nodejs.org/ nodejs不是一个js框架,千万不要认为是类似jquery的框架,nodejs是js运行时,运行环境,类比java中jvm。做前端的没用过nodejs都不好意思说自己是前端。nodejs是和jvm同等地位的js运行环境,
xiangzhihong
2018/01/26
2K0
webpack的watch选项不工作原因分析
今天尝试将以前创建的一个前端项目改为webpack编译,该项目使用了VueJS v2.0,原来是编写gulp脚本完成构建的。很自然就直接用vue-cli来搞定这个事了。 使用vue-cli创建项目 因为以前用过webpack,而vue-cli创建的项目底层其实还是使用webpack构建的,所以使用起来还是很简单的。 # 使用yarn,这个命令是跟npm兼容的,但速度快很多,而且可以保证依赖包版本的一致性,强烈推荐 yarn install --global vue-cli vue-cli webpack v
jeremyxu
2018/05/10
4.1K0
Angular2 路由传值
在接收值得组件里面导入ActivatedRoute 路由设置页面传参 { path: 'view/:mid' , component: ViewComponent}, 父级页面路由跳转的实现 <div [routerLink]="['/email/view',mail.id]">页面跳转传值</div> 子页面的Component通过下面的方法可以获取到父页面路由传过来的参数<b>mail.id</b> // import { Component, OnInit } from '@ang
用户1437675
2018/08/20
7870
Angular2 中的指令
组件:一种带有模板的指令;使用component来装饰组件类 属性指令:改变元素的外观或行为,如NgClass,NgStyle;使用Directive来装饰指令类 结构指令:向DOM中添加或删除元素,如NgIf,NgFor;使用Directive来装饰指令类
用户1437675
2018/08/20
1.7K0
angular2 错误集。
ERROR in AppModule is not an NgModule 由于本人也只是略懂angular2,很多东西还不是特别的明白,对于错误的理解还不够深刻,所以对于angular2的错误尽量用最简单的方式解决。 对于 ERROR in AppModule is not an NgModule 的错误,追根究底的话,应该是版本的问题,typescript的版本,具体是啥不清楚。 如果解决: 在自己的电脑上重新安装一个anguar2的新工程,ng new 工程名; 然后将旧app中的所有的内容copy到
杭州前端工程师
2018/06/15
7010
Angular2 初体验
Angular2 已经发布 beta9 , 是时候折腾一下了。 Angular2 和 AngularJS 1.x 相比, 可以说是全新的框架, 除了名字有延续性之外, 能延续的真的不多。
beginor
2020/08/10
1.6K0
Angular2 之 Promise vs Observable
如果看成状态机 Promise 具有 3 个状态:pending、resolved、rejected(如果 Cancelable Promise 正式通过,那么还会增加一个状态)。 Observable 有 N + 3 个状态:idle、pending、resolved_0、resolved_1 … resolved_N、completed 和 error。 总结:相比于 Promise 这个有限状态机而言,Observable 既可能是有限状态机,也可能是无限状态机(N 为无穷)。 调用情况 Ob
贺贺V5
2018/08/21
6030
Angular 路由配置(预加载配置,懒加载配置)
(1)RouterModule对象提供了两个静态的方法:forRoot()和forChild()来配置路由信息。
玖柒的小窝
2021/11/04
3.2K0
mongo minio on openebs 工作量不饱满教程
作者 | 老根 - laf框架作者 笔者在开发laf(https://github.com/lafjs/laf)的过程中依赖了mongo minio这些组件,本文就如何对这些组件最佳实践来做个介绍。
sealyun
2022/05/16
3.8K0
mongo minio on openebs 工作量不饱满教程

相似问题

Angular2 ngClass不工作

10

Angular2,RouteParams不工作

21

Angular2 ngModel不工作

211

Angular2 ngSwitch不工作

53

angular2管不工作

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文