ng-route模块中的when()和ui-route的state()都提供了resolve属性。

为什么需要使用resolve?
当路由切换的时候,被路由的页面中的元素(标签)就会立马显示出来,同时,数据会被准备好并呈现出来。但是注意,数据和元素并不是同步的,在没有任何设置的情况下,AngularJS默认先呈现出元素,而后再呈现出数据。这样就会导致页面会被渲染两遍,导致“页面UI抖动”的问题,对用户不太友好。resolve的出现解决了这个问题。
resolve是干嘛用的
resolve属性里的值会在路由成功前被预先设定好,然后注入到控制器中。通俗地将,就是等数据都“就位”后,才进行路由(其实我觉得也不能叫路由,因为路由是一些列的操作,其中就包括了设置resolve属性等等)。这样的好处就是页面仅会被渲染一遍。
<!--首页.html--> <div ng-app="myApp"> <div><a ui-sref = "index">前往list.html</a></div> <div ui-view></div><!--这里是路由视图存放的地方--> </div>
<!--list.html>
<div>
<h1>HI,这里是list.html</h1>
<a ui-sref="index.list">点击加载list.html视图</a>
<div ui-view></div>
<h1>{{user}}</h1>
<h2>{{name}}</h2>
<h3>{{age}}</h3>
<h3>{{email}}</h3>
</div>
//JS
var app = angular.module('myApp',['ui.router']);
app.config(["$stateProvider",function($stateProvider){
$stateProvider
.state("index",{
url:'/',
templateUrl:'list.html',
controller:'myController',
resolve:{
user:function(){
return {
name:"perter",
email:"826415551@qq.com",
age:"18"
}
}
}
})
}]);
app.controller('myController',function($scope,user){
$scope.name=user.name;
$scope.age=user.age;
$scope.email=user.email;
$scope.user=user;
});
我在state方法里面设置了resolve属性,里面的值是一个名为user的对象,它存有几个值(格式好像JSON)。并把这个user变量注入到控制器中。这样就完成了预加载了。
这种把resolve属性的值(这里是user)注入到控制器的方式有一个非常强大的地方就是,可以运用他来重用控制器,而我们需要做的仅仅只是改变user对象里面的值(tips:如果是嵌套路由的话,不重新设置resolve值则会“继承”父路由的resolve值,如果不是嵌套路由且不重新设置,则不会正确显示)。
<!--list.html-->
<div>
<h1>HI,这里是list.html</h1>
<a ui-sref="index.list">点击加载list.html视图</a>
<a ui-sref="index.list2">点击加载list2.html视图</a>
<div ui-view></div>
<h1>{{user}}</h1>
<h2>{{name}}</h2>
<h3>{{age}}</h3>
<h3>{{email}}</h3>
</div>
//js
var app = angular.module('myApp',['ui.router']);
app.config(["$stateProvider",function($stateProvider){
$stateProvider
.state("index",{
url:'/',
templateUrl:'list.html',
controller:'myController',
resolve:{
user:function(){
return {
name:"perter",
email:"826415551@qq.com",
age:"18"
}
}
}
})
.state("index.list",{
url:'/list',
template:'<h1>{{name}}</h1>',
controller:'myController',
})
.state("index.list2",{
url:'/list2',
template:'<h1>{{name}}</h1>',
controller:'myController',
resolve:{
user:function () {
return{
name:"Rose"
}
}
}
})
}]);
app.controller('myController',function($scope,user){
$scope.name=user.name;
$scope.age=user.age;
$scope.email=user.email;
$scope.user=user;
});
这里省略了首页的html,可以翻到最上面看。重点对比最后的两个state(),可以发现第一个没有重新设置resolve属性,而第二个重新设置了resolve()属性。他们虽然共用了同一个控制器myController ,但是他们的值却不相同。
这样,控制器的可维护性就会得到提高。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# ui
# router
# resolve
# angular
# 路由
# 浅谈angular2路由预加载策略
# Angular实现预加载延迟模块的示例
# 就会
# 加载
# 呈现出
# 首页
# 是一个
# 器中
# 他们的
# 几个
# 我在
# 我觉得
# 第一个
# 不太
# 没有任何
# 会在
# 这个问题
# 一遍
# 用了
# 第二个
# 如果不是
# 他来
相关文章:
网站制作话术技巧,网站推广做的好怎么话术?
,柠檬视频怎样兑换vip?
如何在景安云服务器上绑定域名并配置虚拟主机?
网站制作的步骤包括,正确网址格式怎么写?
,南京靠谱的征婚网站?
网站制作网站,深圳做网站哪家比较好?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何在阿里云服务器自主搭建网站?
如何在腾讯云免费申请建站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何在云服务器上快速搭建个人网站?
南京网站制作费用,南京远驱官方网站?
如何在Tomcat中配置并部署网站项目?
建站之星在线版空间:自助建站+智能模板一键生成方案
魔方云NAT建站如何实现端口转发?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
建站之星价格显示格式升级,你的预算足够吗?
建站之星如何取消后台验证码生成?
在线制作视频网站免费,都有哪些好的动漫网站?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
高端建站如何打造兼具美学与转化的品牌官网?
建站之星备案流程有哪些注意事项?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
建站之星如何快速更换网站模板?
广州建站公司哪家好?十大优质服务商推荐
SQL查询语句优化的实用方法总结
文字头像制作网站推荐软件,醒图能自动配文字吗?
建站之星如何修改网站生成路径?
如何获取开源自助建站系统免费下载链接?
建站之星代理费用多少?最新价格详情介绍
如何打造高效商业网站?建站目的决定转化率
制作国外网站的软件,国外有哪些比较优质的网站推荐?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
,如何利用word制作宣传手册?
潮流网站制作头像软件下载,适合母子的网名有哪些?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
Python如何创建带属性的XML节点
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
建站主机CVM配置优化、SEO策略与性能提升指南
电商网站制作公司有哪些,1688网是什么意思?
如何设计高效校园网站?
如何快速搭建个人网站并优化SEO?
制作电商网页,电商供应链怎么做?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何在Windows虚拟主机上快速搭建网站?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
*请认真填写需求信息,我们会在24小时内与您取得联系。