當前位置: 首頁>>代碼示例>>TypeScript>>正文


TypeScript compiler.jitExpression函數代碼示例

本文整理匯總了TypeScript中@angular/compiler.jitExpression函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript jitExpression函數的具體用法?TypeScript jitExpression怎麽用?TypeScript jitExpression使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。


在下文中一共展示了jitExpression函數的7個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。

示例1: isUseClassProvider

    get: () => {
      if (def === null) {
        // Check whether the injectable metadata includes a provider specification.
        const hasAProvider = isUseClassProvider(meta) || isUseFactoryProvider(meta) ||
            isUseValueProvider(meta) || isUseExistingProvider(meta);

        let deps: R3DependencyMetadata[]|undefined = undefined;
        if (!hasAProvider || (isUseClassProvider(meta) && type === meta.useClass)) {
          deps = reflectDependencies(type);
        } else if (isUseClassProvider(meta)) {
          deps = meta.deps && convertDependencies(meta.deps);
        } else if (isUseFactoryProvider(meta)) {
          deps = meta.deps && convertDependencies(meta.deps) || [];
        }

        // Decide which flavor of factory to generate, based on the provider specified.
        // Only one of the use* fields should be set.
        let useClass: Expression|undefined = undefined;
        let useFactory: Expression|undefined = undefined;
        let useValue: Expression|undefined = undefined;
        let useExisting: Expression|undefined = undefined;

        if (!hasAProvider) {
          // In the case the user specifies a type provider, treat it as {provide: X, useClass: X}.
          // The deps will have been reflected above, causing the factory to create the class by
          // calling
          // its constructor with injected deps.
          useClass = new WrappedNodeExpr(type);
        } else if (isUseClassProvider(meta)) {
          // The user explicitly specified useClass, and may or may not have provided deps.
          useClass = new WrappedNodeExpr(meta.useClass);
        } else if (isUseValueProvider(meta)) {
          // The user explicitly specified useValue.
          useValue = new WrappedNodeExpr(meta.useValue);
        } else if (isUseFactoryProvider(meta)) {
          // The user explicitly specified useFactory.
          useFactory = new WrappedNodeExpr(meta.useFactory);
        } else if (isUseExistingProvider(meta)) {
          // The user explicitly specified useExisting.
          useExisting = new WrappedNodeExpr(meta.useExisting);
        } else {
          // Can't happen - either hasAProvider will be false, or one of the providers will be set.
          throw new Error(`Unreachable state.`);
        }

        const {expression} = compileR3Injectable({
          name: type.name,
          type: new WrappedNodeExpr(type),
          providedIn: computeProvidedIn(meta.providedIn),
          useClass,
          useFactory,
          useValue,
          useExisting,
          deps,
        });

        def = jitExpression(expression, angularCoreEnv, `ng://${type.name}/ngInjectableDef.js`);
      }
      return def;
    },
開發者ID:Tim-Shadow,項目名稱:angular,代碼行數:60,代碼來源:injectable.ts

示例2: Error

    get: () => {
      if (ngComponentDef === null) {
        if (componentNeedsResolution(metadata)) {
          const error = [`Component '${stringify(type)}' is not resolved:`];
          if (metadata.templateUrl) {
            error.push(` - templateUrl: ${stringify(metadata.templateUrl)}`);
          }
          if (metadata.styleUrls && metadata.styleUrls.length) {
            error.push(` - styleUrls: ${JSON.stringify(metadata.styleUrls)}`);
          }
          error.push(`Did you run and wait for 'resolveComponentResources()'?`);
          throw new Error(error.join('\n'));
        }
        // The ConstantPool is a requirement of the JIT'er.
        const constantPool = new ConstantPool();

        // Parse the template and check for errors.
        const template = parseTemplate(
            metadata.template !, `ng://${stringify(type)}/template.html`, {
              preserveWhitespaces: metadata.preserveWhitespaces || false,
            },
            '');
        if (template.errors !== undefined) {
          const errors = template.errors.map(err => err.toString()).join(', ');
          throw new Error(
              `Errors during JIT compilation of template for ${stringify(type)}: ${errors}`);
        }

        // Compile the component metadata, including template, into an expression.
        // TODO(alxhub): implement inputs, outputs, queries, etc.
        const res = compileR3Component(
            {
              ...directiveMetadata(type, metadata),
              template,
              directives: new Map(),
              pipes: new Map(),
              viewQueries: [],
              wrapDirectivesInClosure: false,
              styles: metadata.styles || [],
              encapsulation: metadata.encapsulation || ViewEncapsulation.Emulated,
              animations: metadata.animations || null
            },
            constantPool, makeBindingParser());
        const preStatements = [...constantPool.statements, ...res.statements];

        ngComponentDef = jitExpression(
            res.expression, angularCoreEnv, `ng://${type.name}/ngComponentDef.js`, preStatements);

        // If component compilation is async, then the @NgModule annotation which declares the
        // component may execute and set an ngSelectorScope property on the component type. This
        // allows the component to patch itself with directiveDefs from the module after it
        // finishes compiling.
        if (hasSelectorScope(type)) {
          const scopes = transitiveScopesFor(type.ngSelectorScope);
          patchComponentDefWithScope(ngComponentDef, scopes);
        }
      }
      return ngComponentDef;
    },
開發者ID:baconwaffles,項目名稱:angular,代碼行數:59,代碼來源:directive.ts

示例3: ConstantPool

 get: () => {
   if (def === null) {
     const constantPool = new ConstantPool();
     const sourceMapUrl = `ng://${type && type.name}/ngDirectiveDef.js`;
     const res = compileR3Directive(
         directiveMetadata(type, directive), constantPool, makeBindingParser());
     def = jitExpression(res.expression, angularCoreEnv, sourceMapUrl, constantPool);
   }
   return def;
 },
開發者ID:hulkike,項目名稱:angular,代碼行數:10,代碼來源:directive.ts

示例4: compilePipeFromMetadata

    get: () => {
      if (ngPipeDef === null) {
        const sourceMapUrl = `ng://${stringify(type)}/ngPipeDef.js`;

        const name = type.name;
        const res = compilePipeFromMetadata({
          name,
          type: new WrappedNodeExpr(type),
          deps: reflectDependencies(type),
          pipeName: meta.name,
          pure: meta.pure !== undefined ? meta.pure : true,
        });

        ngPipeDef = jitExpression(res.expression, angularCoreEnv, sourceMapUrl, res.statements);
      }
      return ngPipeDef;
    },
開發者ID:KaneFreeman,項目名稱:angular,代碼行數:17,代碼來源:pipe.ts

示例5: wrap

 get: () => {
   if (def === null) {
     const meta: R3NgModuleMetadata = {
       type: wrap(type),
       bootstrap: flatten(ngModule.bootstrap || EMPTY_ARRAY).map(wrap),
       declarations: declarations.map(wrap),
       imports:
           flatten(ngModule.imports || EMPTY_ARRAY).map(expandModuleWithProviders).map(wrap),
       exports:
           flatten(ngModule.exports || EMPTY_ARRAY).map(expandModuleWithProviders).map(wrap),
       emitInline: true,
     };
     const res = compileR3NgModule(meta);
     def = jitExpression(res.expression, angularCoreEnv, `ng://${type.name}/ngModuleDef.js`);
   }
   return def;
 },
開發者ID:adriensamson,項目名稱:angular,代碼行數:17,代碼來源:module.ts

示例6: wrap

 get: () => {
   if (ngInjectorDef === null) {
     const meta: R3InjectorMetadata = {
       name: type.name,
       type: wrap(type),
       deps: reflectDependencies(type),
       providers: new WrappedNodeExpr(ngModule.providers || EMPTY_ARRAY),
       imports: new WrappedNodeExpr([
         ngModule.imports || EMPTY_ARRAY,
         ngModule.exports || EMPTY_ARRAY,
       ]),
     };
     const res = compileInjector(meta);
     ngInjectorDef =
         jitExpression(res.expression, angularCoreEnv, `ng://${type.name}/ngInjectorDef.js`);
   }
   return ngInjectorDef;
 },
開發者ID:Polatouche,項目名稱:angular,代碼行數:18,代碼來源:module.ts

示例7: ConstantPool

    get: () => {
      if (def === null) {
        // The ConstantPool is a requirement of the JIT'er.
        const constantPool = new ConstantPool();

        // Parse the template and check for errors.
        const template = parseTemplate(templateStr, `ng://${type.name}/template.html`, {
          preserveWhitespaces: metadata.preserveWhitespaces || false,
        });
        if (template.errors !== undefined) {
          const errors = template.errors.map(err => err.toString()).join(', ');
          throw new Error(`Errors during JIT compilation of template for ${type.name}: ${errors}`);
        }

        // Compile the component metadata, including template, into an expression.
        // TODO(alxhub): implement inputs, outputs, queries, etc.
        const res = compileR3Component(
            {
              ...directiveMetadata(type, metadata),
              template,
              directives: new Map(),
              pipes: new Map(),
              viewQueries: [],
            },
            constantPool, makeBindingParser());

        def = jitExpression(
            res.expression, angularCoreEnv, `ng://${type.name}/ngComponentDef.js`, constantPool);

        // If component compilation is async, then the @NgModule annotation which declares the
        // component may execute and set an ngSelectorScope property on the component type. This
        // allows the component to patch itself with directiveDefs from the module after it finishes
        // compiling.
        if (hasSelectorScope(type)) {
          patchComponentDefWithScope(def, type.ngSelectorScope);
        }
      }
      return def;
    },
開發者ID:abalad,項目名稱:angular,代碼行數:39,代碼來源:directive.ts


注:本文中的@angular/compiler.jitExpression函數示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。