如何在有角度的2+降级组件上强制执行id?

时间:2017-08-01 08:03:18

标签: angular migration

我将AngularJS 1.6组件迁移到Angular 4.3.2,并且需要在组件标记上强制实施id属性。但是,要使ng2 +与现有的ng1组件一起使用,您需要降级它们:

angular.module('myNg1module')
  .directive('myComponent', downgradeComponent({component: MyComponent}))

在已编译的输出中,这会使Angular generate a dynamic id覆盖您自己的id。例如,输出将是:

<my-component id="NG2_UPGRADE_27_0"></my-component>

我尝试的没有成功:

  • 在模板中设置id属性:<my-component id="my-id">但输出只会覆盖它;
  • 在模板[attr.id]中设置了<my-component [attr.id]="my-id">的ID,但这将被忽略。

1 个答案:

答案 0 :(得分:1)

如果不是an Angular bug的真正解决方案,则以下是我用来覆盖生成的id的解决方法:

@Component({
  selector: 'my-component'
})
class MyComponent implements OnInit {
  @Input() id: string;

  constructor(private el: ElementRef) {}

  ngOnInit(): void {
    this.el.nativeElement.id = this.id;
  }
}

然后调用<my-component [id]="my-id">

看起来覆盖了这样生成的id won't have bad side-effects