角度模板:在生产模式下禁用div

时间:2018-10-02 16:45:03

标签: angular typescript production-environment

我的Web应用程序中有几个div仅用于调试,我想在生产模式下将其删除。

在我的模板中,我正在尝试执行以下操作:

<div *ngIf=!environment.production>{{ fooState | async | json}}</div>

但是,在运行ng serve --prod时出现以下错误,此操作将失败:

  

src / app / foo / foo.component.html(18,6)中的错误::类型'Foo'不存在属性'environment'

有什么方法可以在生产模式下禁用这些功能,而无需在每个组件中添加另一个字段?

我正在使用Angular cli 1.7.4和Angular 5.2.10

2 个答案:

答案 0 :(得分:2)

您的条件正确:*ngIf="!environment.production"

尽管您需要在组件中导入环境对象。

import { environment } from 'src/environments/environment';

Component({...})
export class MyComponent {
  public environment = environment;
}

答案 1 :(得分:1)

您可以创建一个指令,以仅在environment.production为false时显示div元素。像这样的blitzstack示例: https://stackblitz.com/edit/angular-eziobx

import { Directive, ViewContainerRef, OnInit, TemplateRef } from '@angular/core';
import { environment } from '../environment';

/**
 * usage: <div *hideProd></div>
 */
@Directive({
  selector: '[hideProd]'
})
export class HideProdDirective implements OnInit{

  constructor(private templateRef: TemplateRef<any>, private viewContainerRef: ViewContainerRef) { }

  ngOnInit(): void {
    if(!environment.prod){
      this.viewContainerRef.createEmbeddedView(this.templateRef);
    }
  }

}