angular.js最核心的几句

它们是放在框架的最后几句,由于自带太多指令了。因此可允许用户一行JS也不用就能构建一个智能的应用。


  bindJQuery();



  publishExternalAPI(angular);



  jqLite(document).ready(function() {

    angularInit(document, bootstrap);

  });

决定是使用jQuery还是自带的jqLite,如果是jQuery还要加工一下。




function bindJQuery() {

  // bind to jQuery if present;

  jQuery = window.jQuery;

  // reset to jQuery or default to us.

  if (jQuery) {

    jqLite = jQuery;

    extend(jQuery.fn, {

      scope: JQLitePrototype.scope,

      controller: JQLitePrototype.controller,

      injector: JQLitePrototype.injector,

      inheritedData: JQLitePrototype.inheritedData

    });

    JQLitePatchJQueryRemove('remove', true);

    JQLitePatchJQueryRemove('empty');

    JQLitePatchJQueryRemove('html');

  } else {

    jqLite = JQLite;

  }

  angular.element = jqLite;

}




function publishExternalAPI(angular){

  extend(angular, {

    'bootstrap': bootstrap,//这些都是Angular.js这件的内部方法,需要将它们放到angular中去

    'copy': copy,

    'extend': extend,

    'equals': equals,

    'element': jqLite,

    'forEach': forEach,

    'injector': createInjector,

    'noop':noop,

    'bind':bind,

    'toJson': toJson,

    'fromJson': fromJson,

    'identity':identity,

    'isUndefined': isUndefined,

    'isDefined': isDefined,

    'isString': isString,

    'isFunction': isFunction,

    'isObject': isObject,

    'isNumber': isNumber,

    'isElement': isElement,

    'isArray': isArray,

    'version': version,

    'isDate': isDate,

    'lowercase': lowercase,

    'uppercase': uppercase,

    'callbacks': {counter: 0}

  });



  angularModule = setupModuleLoader(window);

  try {

    angularModule('ngLocale');

  } catch (e) {

    angularModule('ngLocale', []).provider('$locale', $LocaleProvider);

  }



  angularModule('ng', ['ngLocale'], ['$provide',

    function ngModule($provide) {

      $provide.provider('$compile', $CompileProvider).

        directive({///ng/directive/这个文件下的所有JS文件,一个指令一个JS文件。里面告诉编译器如何抽取它们与绑定事件。

            a: htmlAnchorDirective,

            input: inputDirective,

            textarea: inputDirective,

            form: formDirective,

            script: scriptDirective,

            select: selectDirective,

            style: styleDirective,

            option: optionDirective,

            ngBind: ngBindDirective,

            ngBindHtmlUnsafe: ngBindHtmlUnsafeDirective,

            ngBindTemplate: ngBindTemplateDirective,

            ngClass: ngClassDirective,

            ngClassEven: ngClassEvenDirective,

            ngClassOdd: ngClassOddDirective,

            ngCsp: ngCspDirective,

            ngCloak: ngCloakDirective,

            ngController: ngControllerDirective,

            ngForm: ngFormDirective,

            ngHide: ngHideDirective,

            ngInclude: ngIncludeDirective,

            ngInit: ngInitDirective,

            ngNonBindable: ngNonBindableDirective,

            ngPluralize: ngPluralizeDirective,

            ngRepeat: ngRepeatDirective,

            ngShow: ngShowDirective,

            ngSubmit: ngSubmitDirective,

            ngStyle: ngStyleDirective,

            ngSwitch: ngSwitchDirective,

            ngSwitchWhen: ngSwitchWhenDirective,

            ngSwitchDefault: ngSwitchDefaultDirective,

            ngOptions: ngOptionsDirective,

            ngView: ngViewDirective,

            ngTransclude: ngTranscludeDirective,

            ngModel: ngModelDirective,

            ngList: ngListDirective,

            ngChange: ngChangeDirective,

            required: requiredDirective,

            ngRequired: requiredDirective,

            ngValue: ngValueDirective

        }).

        directive(ngAttributeAliasDirectives).

        directive(ngEventDirectives);

      $provide.provider({//这是直接放在ng目标下的文件,用于提供不同的功能与重要对象

        $anchorScroll: $AnchorScrollProvider,

        $browser: $BrowserProvider,

        $cacheFactory: $CacheFactoryProvider,

        $controller: $ControllerProvider,

        $document: $DocumentProvider,

        $exceptionHandler: $ExceptionHandlerProvider,

        $filter: $FilterProvider,

        $interpolate: $InterpolateProvider,

        $http: $HttpProvider,

        $httpBackend: $HttpBackendProvider,

        $location: $LocationProvider,

        $log: $LogProvider,

        $parse: $ParseProvider,

        $route: $RouteProvider,

        $routeParams: $RouteParamsProvider,

        $rootScope: $RootScopeProvider,

        $q: $QProvider,

        $sniffer: $SnifferProvider,

        $templateCache: $TemplateCacheProvider,

        $timeout: $TimeoutProvider,

        $window: $WindowProvider

      });

    }

  ]);

}




function bootstrap(element, modules) {//开始构娅应用

  var resumeBootstrapInternal = function() {

    element = jqLite(element);

    modules = modules || [];

    modules.unshift(['$provide', function($provide) {

      $provide.value('$rootElement', element);

    }]);

    modules.unshift('ng');

    var injector = createInjector(modules);

    injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector',

       function(scope, element, compile, injector) {

        scope.$apply(function() {

          element.data('$injector', injector);

          compile(element)(scope);

        });

      }]

    );

    return injector;

  };



  var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/;



  if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) {

    return resumeBootstrapInternal();

  }



  window.name = window.name.replace(NG_DEFER_BOOTSTRAP, '');

  angular.resumeBootstrap = function(extraModules) {

    forEach(extraModules, function(module) {

      modules.push(module);

    });

    resumeBootstrapInternal();

  };

}

你可能感兴趣的:(Angular)