You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<divclass="post-list grid-container"><divclass="card" *ngFor="let post of posts"><divclass="title"><b>{{post?.title}}</b></div><divclass="body">{{post.body}}</div></div></div>
同步本人掘金内容:https://juejin.cn/post/7119661212656205855
介绍
提前获取意味着在数据呈现在屏幕之前获取到数据。本文中,你将学到,在路由更改前怎么获取到数据。通过本文,你将学会使用
resolver
, 在Angular App
中应用resolver
,应用到一个公共的预加载导航。你为什么应该使用
Resolver
Resolver
在路由跟组件之间扮演着中间件服务的角色。假设你有一个表单,没有数据时,你想向用户一个空的表单,当在加载用户数据时展示一个loader
,然后当数据返回时,填充表单并隐藏loader
。通常,我们都会在组件的
ngOnInit()
钩子函数中获取数据。也就是说,组件加载完之后,我们发起数据请求。在
ngOnInit()
中操作,我们需要在每个需要的组件加载后,在其路由页面中添加loader
展示。Resolver
可以简化loader
的添加使用。你可以只添加一个适用于每个路由的loader
,而不是每个路由中都添加loader
。本文将结合示例来解析
resolver
的知识点。以便于你可以牢记它并在项目中使用它。在应用中使用
Resolver
为了在应用中使用
resolver
,你需要准备一些接口。你可以通过 JSONPlaceholder 来模拟,而不需要自己开发。JSONPlaceholder
是一个很棒的接口资源,你可以借助它更好学习前端的相关概念而不被接口所约束。现在,接口的问题解决了,我们可以开始
resolver
的应用了。一个resolver
就是一个中间件服务,所以我们将创建一个服务。src/app/resolvers
文件夹中创建了一个服务。resolver
接口中有一个resolve()
方法,它有两个参数:route
(ActivatedRouteSnapshot
的实例)和state
(RouterStateSnapshot
的实例)。loader
通常是在ngOnInit()
中编写所有的AJAX
请求,但是逻辑将会在resolver
中实现,替代ngOnInit()
。接着,创建一个服务来获取
JSONPlaceholder
中列表数据。然后在resolver
中底调用,接着在路由中配置resolve
信息,(页面将会等待)直到resolver
被处理。在resolver
被处理之后,我们可以通过路由来获取数据然后展示在组件中。创建服务并编写逻辑获取列表数据
现在,我们成功创建了服务,是时候编写一个
AJAX
请求的逻辑了。model
的使用能够帮助我们减少错误。post.ts
model
就绪,是时候获取帖子post
的数据了。post.service.ts
现在,这个服务随时可被调用。
demo-resolver.service.ts
帖子列表数据从
resolver
中返回。现在,你需要一个路由去配置resolver
,从路由获取数据,然后让数据展示在组件中。为了进行路由跳转,我们需要创建一个组件。为了路由可见,在
app.component.ts
添加router-outlet
。现在,你可以配置
app-routing.module.ts
文件了。下面的片段代码将有助于你理解路由配置resolver
。app-routing-module.ts
一个
resolve
已经添加到路由配置中了,它将发起一个HTTP
请求,然后当HTTP
请求成功返回后,允许组件初始化。路由将组装获取到的HTTP
请求返回的数据。怎么应用一个预加载导航
向用户展示一个请求正在进行,我们在
AppComponent
中编写一个公共且简单的loader
。你可以根据需要自定义。app.component.html
app.component.ts
当导航开始,
isLoader
值被赋予true
,页面中,你将看到下面的效果。当
resolver
处理完之后,它将会被隐藏。现在,是时候从路由中获取值并将其展示出来。
port-list.component.ts
如上所示,
post
的值来自ActivatedRoute
的快照信息data
。这值都可以获取,只要你在路由中配置了相同的信息。我们在
HTML
进行如下渲染。CSS
片段样式让其看起来更美观。port-list.component.css
从路由中获取数据之后,它会被展示在
HTML
中。效果如下快照。至此,你已经了解完怎么应用
resolver
在你的项目中了。总结
结合用户体验设计,在
resolver
的加持下,你可以提升你应用的表现。了解更多,你可以戳官网。往期精彩推荐
The text was updated successfully, but these errors were encountered: