首页 文章

angular-cli:根据环境使用不同的模板

提问于
浏览
2

我正在使用 @angular/cli: 1.0.0 ,我想根据环境使用组件模板 . 我已经实现了这个:

import {Component} from '@angular/core';
import {environment} from '../environments/environment';

@Component({
  selector: 'tbe',
  templateUrl: environment.BASE_TEMPLATE_PATH+'app.component.html'
})
export class AppComponent {
  ...
}

我的环境设置如下所示:

export const environment = {
  production: false,
  BASE_TEMPLATE_PATH: '../templates/default/'
};

构建过程实际上有效,但浏览器控制台会抛出错误:

Error: Cannot find module "."

如果我用实际路径替换 environment.BASE_TEMPLATE_PATH+'app.component.html' ,它可以工作 .

这里可以使用环境变量吗?如果是的话,我的错误在哪里?


UPDATE:

我为我的问题找到了更好的解决方案:http://www.smartjava.org/content/dynamic-component-loading-angular2-replace-compile

我已经更改了plunker示例来设置templateUrl而不是普通的html模板,这有效:https://plnkr.co/edit/tfxl3ba869oFtrqzyLNk

The Problem:

ComponentResolver已折旧,我无法将其与当前的Angular4版本一起使用 . 我用 ComponentFactoryResolver 尝试了它,但它不起作用 .

2 回答

  • 0

    我以前见过这个问题,它抱怨的原因是从 environment.ts 文件获得的路径变得相对于 environment.ts 文件和 NOT AppComponent.ts 正如您所期望的那样 .

    尝试

    export const environment = {
      production: false,
      BASE_TEMPLATE_PATH: 'absolute/path/to/template/file'
    };
    

    看看它是否有效

    为了获得更好的解决方案,您必须编写一个能够准确地为模板文件提供 absolute 路径的函数 .

    这是一种非常丑陋的黑客行为方式,但似乎你理解这里的风险 .

  • 0

    什么也会起作用(至少在最新的Angular版本中)

    import {Component} from '@angular/core';
    import {environment} from '../environments/environment';
    
    const env = environment;
    
    @Component({
      selector: 'tbe',
      templateUrl: env.BASE_TEMPLATE_PATH+'app.component.html'
    })
    
    export class AppComponent {
      ...
    }
    

    我正面临同样的任务,所以我摆弄着 . 我也可以确认,其他文件不包含在你的AOT-build中 .

相关问题