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


TypeScript compiler.compileInjectable函數代碼示例

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


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

示例1: Error

    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: compile

 compile(node: ts.ClassDeclaration, analysis: R3InjectableMetadata): AddStaticFieldInstruction {
   const res = compileIvyInjectable(analysis);
   return {
     field: 'ngInjectableDef',
     initializer: res.expression,
     type: res.type,
   };
 }
開發者ID:adriensamson,項目名稱:angular,代碼行數:8,代碼來源:injectable.ts

示例3: compile

 compile(node: ts.ClassDeclaration, analysis: R3InjectableMetadata): CompileResult {
   const res = compileIvyInjectable(analysis);
   return {
     name: 'ngInjectableDef',
     initializer: res.expression,
     statements: [],
     type: res.type,
   };
 }
開發者ID:Polatouche,項目名稱:angular,代碼行數:9,代碼來源:injectable.ts

示例4: compile

 compile(node: ts.ClassDeclaration, analysis: InjectableHandlerData): CompileResult {
   const res = compileIvyInjectable(analysis.meta);
   const statements = res.statements;
   if (analysis.metadataStmt !== null) {
     statements.push(analysis.metadataStmt);
   }
   return {
     name: 'ngInjectableDef',
     initializer: res.expression, statements,
     type: res.type,
   };
 }
開發者ID:foresthz,項目名稱:angular,代碼行數:12,代碼來源:injectable.ts


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