Angular JS 의 초기화, provider 호출까지
jqLite(document).ready(function() { angularInit(document, bootstrap); }); angularInit(document, bootstrap); ... names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app']; forEach(names, function(name) { // ngApp 녀석들 elements 에 append }) // elements 는 ng-app 에 해당하는 녀석들의 list forEach(elements, function(element) { // module 에 ng-app 에 적힌 이름을 넣는다. if (!appElement) { ... if (match) { appElement = element; module = (match[2] || '').replace(/\s+/g, ','); } else { forEach(element.attributes, function(attr) { if (!appElement && names[attr.name]) { appElement = element; module = attr.value; } }); } } }) if (appElement) { bootstrap(appElement, module ? [module] : []); } function bootstrap(element, modules) { ... if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { return doBootstrap(); } // doBootstrap() ... modules.unshift(['$provide', function($provide) { $provide.value('$rootElement', element); }]); modules.unshift('ng'); var injector = createInjector(modules); } function createInjector(modulesToLoad) { providerInjector = (providerCache.$injector = createInternalInjector(providerCache, function() { throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); })), forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); function loadModules(modulesToLoad){ ... forEach(modulesToLoad, function(module) { ... try { if (isString(module)) { moduleFn = angularModule(module); runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); for(invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++) { var invokeArgs = invokeQueue[i], provider = providerInjector.get(invokeArgs[0]); provider[invokeArgs[1]].apply(provider, invokeArgs[2]); } } ... }... }) } // fn example // [["$stateProvider", function config($stateProvider)]] function invoke(fn, self, locals){ var args = [], $inject = annotate(fn), ... for(i = 0, length = $inject.length; i < length; i++) { ... } if (isArray(fn)) { fn = fn[length]; } // http://jsperf.com/angularjs-invoke-apply-vs-switch // #5388 // 각종 provider 이 호출 됨. return fn.apply(self, args); } }
댓글 없음:
댓글 쓰기