Angular TemplateRef构造函数注入TemplateRef没有提供程序

Angular TemplateRef构造函数注入TemplateRef没有提供程序,angular,Angular,也许我从根本上误解了什么,但我正在尝试获取一个指向组件模板的TemplateRef(在下面的简单示例中只是“Hello”)。我已将代码精简到最低限度,以尝试识别问题: import { Component, TemplateRef} from '@angular/core'; @Component({ selector: 'app-root', template: `Hello`, styleUrls: ['./app.component.css'] }) export class

也许我从根本上误解了什么,但我正在尝试获取一个指向组件模板的TemplateRef(在下面的简单示例中只是“Hello”)。我已将代码精简到最低限度,以尝试识别问题:

import { Component, TemplateRef} from '@angular/core';
@Component({
  selector: 'app-root',
  template: `Hello`,
  styleUrls: ['./app.component.css']
})
export class AppComponent implements AfterViewInit {
  constructor(private tr: TemplateRef<any>) {}
}
从'@angular/core'导入{Component,TemplateRef};
@组成部分({
选择器:'应用程序根',
模板:`Hello`,
样式URL:['./app.component.css']
})
导出类AppComponent实现AfterViewInit{
构造函数(私有tr:TemplateRef){}
}
这实际上并没有“做”任何事情,因为我已经删除了所有的功能,但我希望它能工作。当我运行这段代码时,我得到了一个错误:没有TemplateRef的提供程序,但我看到了SO和其他地方的例子,这些例子显然是有效的。我错过了什么

角度4.2.4


谢谢。

我知道它很老了,但让我来回答这个问题,因为我在过去几天里一直在为同一个问题苦苦挣扎。通过构造函数将TemplateRef注入到代码中的唯一方法是在结构指令(带星号*)中工作。您可以看到,所有零部件都是使用视图工厂创建的,因此它们被创建为主体视图。即使在标记中扭曲它们,也无法将TemplateRef注入组件

结构指令与此不同:

<div *myDirective="1">Tesla was robbed !!!!</div>

*ngIf就是这样工作的。如果没有结构指令的概念,您将不得不在组件内部创建条件逻辑。并手动添加或删除所需的视图。你可以用angular(角度)来做,但它比较混乱。

好的,谢谢,但不是很有帮助……你觉得我错过了任何信息链接吗?
<ng-template [SomeVariable]="3000">   
   <div>Tesla was robbed !!!!</div>
</ng-template>
<!--bindings={
  "ng-reflect-directive-somevariable": "3000"
}-->
<div>Tesla was robbed !!!!</div>
 this.viewContainerRef.createEmbeddedView(this.templateRef);