zoukankan      html  css  js  c++  java
  • 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();
      };
    }
    
    机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
  • 相关阅读:
    virtualenv建立新的python环境
    c++ 类构造函数&析构函数
    Spring中的BeanPostProcessor和BeanFactoryPostProcessor
    01 | 日志段:保存消息文件的对象是怎么实现的?
    linux 常用命令大全
    select/poll/epoll
    Redis 数据结构 api操作复杂度 ~~~~
    Redis底层数据结构----1 结构与命令
    Linux进阶系列 1 --- 进程通信
    让我们来写个算法吧,(6);链表排序
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/3017061.html
Copyright © 2011-2022 走看看