一句话: 它们Angular框架声明周期的各个阶段,常规约定各专注于特定功能,经过处理也可以互相替换
功能细分简解
config
Angular module模块的加载阶段-应用在此时还没有启动
run
Angular应用是第一个被运行的方法,相当于其它语言中的main()方法
factory
factory() 方法是创建和配置服务的最快捷方式,单例对象,在应用的生命周期内只会被调用一次 注入factory,相当于注入factory定义时的函数调用入口。 用 Factory 就是创建一个对象,为它添加属性,然后把这个对象返回出来。你把 service 传进 controller 之后,在 controller 里这个对象里的属性就可以通过 factory 使用了
service
service() 可以注册一个支持构造函数的服务,它允许我们为服务对象注册一个构造
函数 注入service,相当于注入service定义时的function实例 Service 是用"new"关键字实例化的。因此,你应该给"this"添加属性,然后 service 返回"this"。你把 service 传进 controller 之后,在controller里 "this" 上的属性就可以通过 service 来使用了。
provider
service和factory都是由$provide 服务创建的,$provide服务负责在运行时初始化这些提供者 注入provider,相当于注入provider内$get定义的函数实例的调用 Providers是唯一一种你可以传进 .config() 函数的 service
constant
Angular常量,相当于其他语言中的静态常量类
value
类似constant,value()方法和constant()方法之间最主要的区别是,constant可以注入到配置函数config中,而value不行
config实例
angular.module('myApp', [])
.config(function($provide, $compileProvider) {
$provide.factory('myFactory', function() {
var service = {};
return service;
});
$compileProvider.directive('myDirective', function() {
return {
template: 'Click me '
};
});
});
angular.module('myApp', [])
.config(function($routeProvider) {
$routeProvider.when('/', {
controller: 'WelcomeController',
template: 'views/welcome.html'
});
})
.config(function(ConnectionProvider) {
ConnectionProvider.setApiKey('SOME_API_KEY');
});
run实例
angular.module('myApp', [])
.run(function($rootScope, AuthService) {
$rootScope.$on('$routeChangeStart', function(evt, next, current) {
// 如果用户未登录
if (!AuthService.userLoggedIn()) {
if (next.templateUrl === "login.html") {
// 已经转向登录路由因此无需重定向
} else {
$location.path('/login');
}
}
});
});
service factory provider实例
{{ output1 }}
{{ output2 }}
{{ output3 }}
constant实例
这个常量服务可以像其他服务一样被注入到配置函数中
{{apiKeys}} from scope
{{apiKey}} from constant
value实例
{{apiKeyValue}}