路由的Resolve机制(需要了解promise)

angular的resovle机制,实际上是应用了promise,在进入特定的路由之前给我们一个做预处理的机会

1、在进入这个路由之前先懒加载对应的 .js

 1     $stateProvider
 2         .state(‘owner_detail_room‘,{
 3             url: ‘/owner_detail_room/{id:[0-9]{1,10}}‘,
 4             views:{
 5                 ‘main‘ : {
 6                     templateUrl:function() { return ‘templates/owner_detail_room.html‘},
 7                     controller: ‘owner_detail_roomCtrl‘
 8                 }
 9             },
10             resolve:{
11                 loadCtrl: [‘$ocLazyLoad‘, function($ocLazyLoad){
12                     return $ocLazyLoad.load(‘js/owner_detail_roomCtrl.js‘)
13                 }]
14             }
15         })

2、请注意,resolve是一个对象,它的key由我们自己指定,value则是一个promise的异步请求或字符串

  首先,来一个多个键值对的例子1-懒加载js,2-获取user,3-判断页面权限

 1         .state(‘owner_detail_room‘,{
 2             url: ‘/owner_detail_room/{id:[0-9]{1,10}}‘,
 3             views:{
 4                 ‘main‘ : {
 5                     templateUrl:function() { return ‘templates/owner_detail_room.html‘},
 6                     controller: ‘owner_detail_roomCtrl‘
 7                 }
 8             },
 9             resolve:{
10                 loadCtrl: [‘$ocLazyLoad‘, function($ocLazyLoad){
11                     return $ocLazyLoad.load(‘js/owner_detail_roomCtrl.js‘)
12                 }],
13                 user: [‘userservice‘,function(userservice){
14                     return userservice.getUser();
15                 }],
16                 userLevelCheck:[‘LevelCheck‘,‘userservice‘,function(LevelCheck,userservice){
17                     var isPass = LevelCheck.check(userservice.userLevel);
18                     if(isPass){
19                         return userservice.userLevel;
20                     }else{
21                         $state.go(‘level-is-not-enough‘);
22                     }
23                 }]
24             }
25         })

然后在对应的页面的ctrl中,可以注入resolve中的返回

1  app.controller(‘owner_detail_roomCtrl‘,[‘$scope‘,‘user‘, function($scope,users) {
2    $scope.users = users;
3  });

3、从resolve到进入路由Ctrl中,应用到的就是promise,($q服务属性方法:$q.defer(),  $q.all(),  $q.when(),  $q.reject(),  $q.resolve().....)

  来个栗子,剩下看大家了,

 1   resolve: {
 2     data: function(User, Post, $q) {
 3       deferred = $q.defer();
 4
 5       $q.all([User.getAll, Post.getTops()]).then(function(results) {
 6         deferred.resolve({
 7           users: results[0],
 8           posts: results[1]
 9         })
10       });
11
12       return deferred.promise;
13     }
14   }

最后的最后,如果有错误,请务必,一定要指出

时间: 2024-08-09 00:51:25

路由的Resolve机制(需要了解promise)的相关文章

AngularJS路由系列(2)--刷新、查看路由,路由事件和URL格式,获取路由参数,路由的Resolve

本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● 刷新路由● 查看当前路由以及所有路由● 路由触发事件● 获取路由参数 ● 路由的resolve属性● 路由URL格式 项目文件结构 node_modules/ public/.....app/..........bower_components/...............toastr/....................toastr.min.css....................toastr.min

MVC特性路由的提供机制

回顾:传统路由是如何提供的? 我们知道最终匹配的路由数据是保存在RouteData中的,而RouteData通常又是封装在RequestContext中的,他们是在哪里被创建的呢?没错,回到了UrlRoutingModule,我们知道UrlRoutingModule通过注册HttpApplication的PostResolveRequestCache方法来分发IHttpHandler决定ASP.NET请求最终交给哪个IHttpHandler去处理的.其实在这之前,首先会通过当前请求的HttpCo

区域路由的注册机制

AreaRegistration.RegisterAllAreas() 我们新建一个名称为Admin的Area,VS生成下面的代码.        { action = , id = 我们先来看AreaRegistration这个抽象类,实际上,它只有一个核心功能,就是RegisterAllAreas,获取所有继承它的子类类型,然后创建它,在为他创建一个AreaRegistrationContext,在调用它的RegisterArea方法.      TypeCacheName =    Are

NAT路由打洞机制

  首先要注意,路由器有一个保护机制,就是不会无缘无故的接受陌生的IP发送过来的SYN包   NAT打洞机制:   1. 当前客户端A想和客户端B建立连接,服务器开了两个端口,一个是主连接端口,一个是辅助连接端口   2. 首先,A,B与主连接端口建立连接.这个时候A要和B建立连接,首先A要和协助端口建立连接,然后在这个端口启动监听   3. 然后服务器主连接将A经过NAT-A转换的公网IP和端口号发送给B,B收到之后首先和协助端口建立连接,发送一些数据之后断开,目的是让服务器知道B经过NAT-

前端使用AngularJS的$resource,后端ASP.NET Web API,实现增删改查

AngularJS中的$resource服务相比$http服务更适合与RESTful服务进行交互.本篇后端使用ASP.NET Web API, 前端使用$resource,实现增删改查. 领域和上下文 首先领域先行. public class StudentVm { [Key] public int Id { get; set; } public string Name { get; set; } public string Age { get; set; } } 上下文. public cla

requirejs、vue、vuex、vue-route的结合使用,您认为可行吗?

在五一节之前和一网友讨论前端技术时,对方提到vue.vue-route如果配合requirejs应用.当时的我没有想得很明白,也没能这位网友一个准确的回复,但我许诺于他五一研究后给他一个回复.本是一天的研究却被我搞成了研究了一周,这拖延症... 闲话少数,进入正题 一.示例代码说明 代码结构说明: modules(存放的为组件,主要是模板与Js对象分成两个文件来写) route:测试子路由的组件 title:就是一个简单的显示文字的组件 app.js:核心类,提供vue的创建.以前modules

AngularJS路由系列(5)-- UI-Router的路由约束、Resolve属性、路由附加数据、路由进入退出事件

本系列探寻AngularJS的路由机制,在WebStorm下开发.主要包括: ● UI-Router约束路由参数● UI-Router的Resolve属性● UI-Router给路由附加数据● UI-Router的onEnter和onExit事件 AngularJS路由系列包括: 1.AngularJS路由系列(1)--基本路由配置2.AngularJS路由系列(2)--刷新.查看路由,路由事件和URL格式,获取路由参数,路由的Resolve3.AngularJS路由系列(3)-- UI-Rou

如果一个promise永不resolve,会内存泄漏吗

答:跟内存泄漏没有直接关系gc的策略不会改变,如果该promise没有被人引用,就会被gc掉.如果仍被引用,就不会被gc掉.即使一个promise,resolve或者reject了,但是它还被人引用,仍然占用内存. 李政 2015/11/19 16:28:39嗯差不多,可以认为promise就是一个普通的对象,不过在vm底层会由host提供一些机制来托管promise.比如chrome的调试器里可以看到所有的promise李政 2015/11/19 16:28:56比如node里面通过nextT

闲话Promise机制

Promise的诞生与Javascript中异步编程息息相关,js中异步编程主要指的是setTimout/setInterval.DOM事件机制.ajax,通过传入回调函数实现控制反转.异步编程为js带来强大灵活性的同时,也带来了嵌套回调的问题.详细来说主要有两点,第一嵌套太深代码可读性太差,第二并行逻辑必须串行执行. 1 request = function(url, cb, eb) { 2 var xhr = new XMLHttpRequest(); 3 xhr.onreadystatec