angular之moduler与服务等api生成

angular之moduler与服务等api生成。(angualr版本是1.2.28)

        function setupModuleLoader(window) {
		//得到 注入器异常与ng异常
                var $injectorMinErr = minErr('$injector');
                var ngMinErr = minErr('ng');
		//方法属性绑定
                function ensure(obj, name, factory) {
                        return obj[name] || (obj[name] = factory());
                }
		//绑定angular,到window上。
                var angular = ensure(window, 'angular', Object);
		//把minerr绑定到 angluar上
                angular.$$minErr = angular.$$minErr || minErr;
		//绑定 module方法到 angualr上,,,当你使用angular.module()的时候,实际上调用了 下面的 module方法
                return ensure(angular, 'module', function() {
			var modules = {};
 			//模块名,依赖关系, configFn,其实就等于 angular.module().config();
                        return function module(name, requires, configFn) {
                                var assertNotHasOwnProperty = function(name, context) {
                                        if (name === 'hasOwnProperty') {
                                                throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context);
                                        }
                                };
				//排除hasOwnProperty,
                                assertNotHasOwnProperty(name, 'module');
				
                                if (requires && modules.hasOwnProperty(name)) {
                                        modules[name] = null;
                                }
                                return ensure(modules, name, function() {
                                        if (!requires) {
                                                throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " +
                                                        "the module name or forgot to load it. If registering a module ensure that you " +
                                                        "specify the dependencies as the second argument.", name);
                                        }
					//这个数组保存 除 run之外所有 方法的操作
                                        /** @type {!Array.<Array.<*>>} */
                                        var invokeQueue = [];
					//保存 run方法的执行
                                        /** @type {!Array.<Function>} */
                                        var runBlocks = [];
					//提前实例化 config方法
                                        var config = invokeLater('$injector', 'invoke');

                                        /** @type {angular.Module} */
                                        var moduleInstance = {
                                                // Private state
                                                _invokeQueue: invokeQueue,
                                                _runBlocks: runBlocks,

                                                requires: requires,
                                               
                                                name: name,

                                                provider: invokeLater('$provide', 'provider'),

                                                service: invokeLater('$provide', 'service'),

                                                animation: invokeLater('$animateProvider', 'register'),

                                                config: config,

                                                run: function(block) {
                                                        runBlocks.push(block);
                                                        return this;
                                                }
                                        };

                                        if (configFn) {
                                                config(configFn);
                                        }
					//执行完module 方法,返回的是这个对象
                                        return moduleInstance;
					//这个方法很关键,provider的名字,初始化方法。
                                        function invokeLater(provider, method, insertMethod) {
						//基本每个 方法 实际执行的这个 方法。
                                                return function() {
                                                        invokeQueue[insertMethod || 'push']([provider, method, arguments]);
                                                        return moduleInstance;
                                                };
                                        }
                                });
                        };
                });

        }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值