angular.module('app').config(
['$controllerProvider', '$compileProvider', '$filterProvider', '$provide',
function($controllerProvider, $compileProvider, $filterProvider, $provide) {
app.controller = $controllerProvider.register;
app.directive = $compileProvider.directive;
app.filter = $filterProvider.register;
app.factory = $provide.factory;
app.service = $provide.service;
app.constant = $provide.constant;
app.value = $provide.value;
}
])
代码背景:在查阅 angular 懒加载 资料时遇到的
一般来说我们想注册controller是过这种方式的:
angular.module('app', [])
.controller('ACtrl', function ($scope) {
$scope.ctrl = 'A Controller';
});
但是这个时候ACtrl
还没有注册到Angular的内部,我们无法使用,只有程序启动后,Angular才会调用$controllerProvider.register
帮我们注册到Angular内部,上面的代码最终会被这样调用:
$controllerProvider.register('ACtrl', function ($scope) {
$scope.ctrl = 'A Controller';
});
楼主给的代码的意思就是将Angular的组件,指令等等的注册接口挂到app对象上。这样做有什么用呢?可以在应用程序启动之后任然可以添加功能,例如
var app = angular.module('app', [])
.controller('ACtrl', function ($scope) {
$scope.ctrl = 'A Controller';
});
程序启动之后我们在添加BCtrl
//after bootstrap
app.controller('BCtrl', function ($scope) {
$scope.ctrl = 'B Controller';
});
这个时候BCtrl
是没有办法使用的,应用程序都启动完毕了,不会在把BCtrl
注册到Angular内部了。但是换成这种方式就不一样了,BCtrl
依旧可以注册到Angular内部
var app;
angular.module('app')
.config(function ($controllerProvider, $compileProvider, $filterProvider, $provide) {
app.controller = $controllerProvider.register;
})
//after bootstrap
app.controller('BCtrl', function ($scope) {
$scope.ctrl = 'B Controller';
});
一般情况下不会写这么难理解的代码。
提供了注册controller
,directive
,filter
,factory
,'service',constant
,'value'的服务供应商。
具体的含义见provider