首页 > Angular 相关代码疑惑 请教含义

Angular 相关代码疑惑 请教含义

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

【热门文章】
【热门文章】