See more:http://toddmotto.com/opinionated-angular-js-styleguide-for-teams/

/**
* Created by Answer1215 on 1/13/2015.
*/ /**
* Controller(s)
* */ function AppController($rootScope, $location) { var appCtrl = this; $rootScope.$on('$routeChangeError', function(event, current, previous, rejection) {
appCtrl.message = rejection.message;
appCtrl.isError = true;
}) appCtrl.goHome = function() { $location.path('/');
}
} /**
* Directive(s)
* */ function ErrorDirective() {
return {
restrict: "EA",
bindToController: true,
controller: 'AppController',
controllerAs: 'appCtrl',
templateUrl: 'error.html'
}
} /**
* Angular module
* */ angular.module('app', [
'ngRoute',
'app.home'
])
.constant('PEOPLE_URL', 'data.json')
.controller('AppController', AppController)
.directive('error', ErrorDirective)
.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: "home.html",
controller: "HomeController",
controllerAs: "homeCtrl",
/*
* resolve run first, prepare the data ready,
* then controller & template show up
* */
resolve: HomeController.resolve
});
});
/**
* Created by Answer1215 on 1/13/2015.
*/ function HomeController(loadPeople, getMessage) {
var homeCtrl = this; homeCtrl.message = getMessage;
homeCtrl.people = loadPeople;
} HomeController.resolve = { loadPeople: function(SimpleDataService) {
return SimpleDataService.getPeople();
},
getMessage : function(SimpleDataService) {
return SimpleDataService.message;
}
} function SimpleDataService($http, $q, PEOPLE_URL) {
var simpleData = {};
simpleData.people = [];
simpleData.message = "Hello From Service"; simpleData.getPeople = function() {
return fetchPeople().then(function(result) {
return result.data;
}); } function fetchPeople() {
var defer = $q.defer();
$http.get(PEOPLE_URL)
.success(function(data, status, headers, config) {
simpleData.people = data;
defer.resolve({data: data, message: "OK"});
}).
error(function(data, status, headers, config) { if(status === 404){
data = data;
defer.reject({data: data, message: "Cannot find " + config.url});
}
});
return defer.promise;
} return simpleData;
} angular.module('app.home', [])
.controller('HomeController', HomeController)
.service('SimpleDataService', SimpleDataService);

While the routes are being resolved we want to show the user something to indicate progress. Angular will fire the $routeChangeStart event as we navigate away from the page, which we can show some form of loading and ajax spinner, which can then be removed on the $routeChangeSuccess

[AngularJS] Best Practise - Resolve promises in router, defer controllers的更多相关文章

  1. AngularJS ui-router 用resolve、service预先加载数据写法,属于优化性能方面吧

    AngularJS的service怎么声明此处就不再赘述,下面的例子是ui-router中使用service的实现代码 $stateProvider.state('myState', { url: & ...

  2. [AngularJS] Best Practise - Controller

    ControllerAs: Use thecontrollerAs syntax always as it aids in nested scoping and controller instance ...

  3. [AngularJS] Best Practise - Minification and annotation

    Annotation Order: It's considered good practice to dependency inject Angular's providers in before o ...

  4. [AngularJS] Best Practise - Module

    Module definitions Angular modules can be declared in various ways, either stored in a variable or u ...

  5. 转: angular编码风格指南

    After reading Google's AngularJS guidelines, I felt they were a little too incomplete and also guide ...

  6. AngularJS之高级Route【三】(八)

    前言 我们知道默认的路由提供(Route Provider)在复杂的应用程序中是不太适合应用场景,它存在诸多限制,所以在Angular 1.2之后此时我们不得不将路由提供作为一个单独的模块当我们需要使 ...

  7. angularJS中的Promise对象($q)的深入理解

    原文链接:a better way to learn AngularJS - promises AngularJS通过内置的$q服务提供Promise编程模式.通过将异步函数注册到promise对象, ...

  8. Promise in AngularJS

    What's promise Angular’s event system provides a lot of power to our Angular apps. One of the most p ...

  9. 转AngularJS路由插件

    AngularJS学习笔记--002--Angular JS路由插件ui.router源码解析 标签: angular源码angularjs 2016-05-04 13:14 916人阅读 评论(0) ...

随机推荐

  1. [原]Unity3D深入浅出 - 认识开发环境中的GameObject菜单栏

    Create Empty:创建空对象 Create Other:创建其他对象 Particle System:创建粒子系统 Camera:创建相机 GUI Text:GUI文本 GUI Texture ...

  2. UVa 1599 (字典序最小的最短路) Ideal Path

    题意: 给出一个图(图中可能含平行边,可能含环),每条边有一个颜色标号.在从节点1到节点n的最短路的前提下,找到一条字典序最小的路径. 分析: 首先从节点n到节点1倒着BFS一次,算出每个节点到节点n ...

  3. poj2001 Shortest Prefixes (trie)

    读入建立一棵字母树,并且每到一个节点就增加这个节点的覆盖数. 然后再重新扫一遍,一旦碰到某个覆盖数为1就是这个单词的最短前缀了. 不知为何下面的程序一直有bug……不知是读入的问题? type nod ...

  4. APIO2010特别行动队(单调队列、斜率优化)

    其实这题一看知道应该是DP,再一看数据范围肯定就是单调队列了. 不过我还不太懂神马单调队列.斜率优化…… 附上天牛的题解:http://www.cnblogs.com/neverforget/arch ...

  5. 使用RMAN迁移文件系统数据库到ASM

    --================================== -- 使用RMAN迁移文件系统数据库到ASM --================================== 在实际 ...

  6. (一)学习C#之浮点类型float小结

    类型:float 大小:32位 范围a:±3.4E38  MSDNhttp://msdn.microsoft.com/zh-cn/library/b1e65aza.aspx 范围b: ±1.5E45~ ...

  7. Gradle使用手册(三):构建任务

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Using-sourceCompatibility-1. ...

  8. 消息系统Kafka介绍

    1.  概述 Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数 据.活跃的流式数据在web网站应用中非常常见,这 些数据包括网站的pv.用户访问了什么内容,搜 ...

  9. 【工具类】如何通过代码安装一个apk文件

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  10. MAC虚拟机NAT方式共享上网设置

    有部分FY需要,我写一下我的方法吧,当初安装完MAC后,无法上网,网络搜索用的是HOST-only方法,试了几次都没有成功,后来尝试NAT方法,发现很简单. 我的主机系统:win7 64位,自动获取I ...