全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解AngularJs路由之Ui-router-resolve(预加载)

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小时内与您取得联系。