Angular 如何使用参数实例化角度组件?
我一直试图通过传递参数来实例化组件,比如Angular 如何使用参数实例化角度组件?,angular,typescript,dependency-injection,angular-components,Angular,Typescript,Dependency Injection,Angular Components,我一直试图通过传递参数来实例化组件,比如nameFilter=newfiltercomponent(“Name”)但是我得到了这个错误: NullInjectorError:字符串没有提供程序 我相信依赖注入会导致这种情况,因为若我不向组件注入任何东西,我不会得到任何错误。那么,究竟是什么原因导致了这种情况,我该如何修复它呢 这是组件代码 import { Component, OnInit, Inject } from '@angular/core'; @Component({ s
nameFilter=newfiltercomponent(“Name”)代码>但是我得到了这个错误:
NullInjectorError:字符串没有提供程序
我相信依赖注入会导致这种情况,因为若我不向组件注入任何东西,我不会得到任何错误。那么,究竟是什么原因导致了这种情况,我该如何修复它呢
这是组件代码
import { Component, OnInit, Inject } from '@angular/core';
@Component({
selector: 'app-filter',
templateUrl: './filter.component.html',
styleUrls: ['./filter.component.scss']
})
export class FilterComponent implements OnInit {
title: String;
constructor(title: String) {
this.title = title;
}
ngOnInit() {
}
}
错误很明显,您是对的,是依赖项注入机制造成的。传递到构造函数中的每个依赖项都必须在运行时注入,Angular需要知道传递什么
在您的情况下,Angular不知道作为字符串title
注入什么
您可以显式地告诉Angular在字符串类型的模块提供程序数组中注入什么。但是,这意味着每次都将使用提供程序数组中提供的任何内容
@NgComponent({
...
providers: [
{ provide: String, useValue: 'my title' }
],
})
查看代码后,可以使用@Input
变量初始化组件-
导出类过滤器组件实现OnInit{
@输入()标题:字符串;
}
作为一种良好的设计实践,避免在组件构造函数中注入原始数据类型,如string
、number
、date
等
但是如果你还需要注射的话。然后您应该让Angular知道标记和将要注入的值
为此,Angular提供了InjectionToken
API
在组件中注入日期类型的示例:
export const DATE=new InjectionToken('DATE');
@NGO组分({
...
供应商:[
{provide:DATE,useValue:new DATE()}//也可以在模块中声明
],
})
导出类组件{
建造师(
@注入(日期)私有fromDate:DATE,
@注入(日期)私有toDate:日期
) {}
}
在构造函数参数中,您引用类型为String
的标题,将其替换为String
,在小写字母中,s不起作用。将其更改为String
也不起作用,因为Angular将尝试为String
这是一种基本类型的提供程序。作为一个好的设计,避免在构造函数中注入基元类型。我一直在尝试用不同的值创建一个组件类的多个实例,这就是为什么我这么做的原因。老实说,如果不注入原始值,我不知道该怎么做。你能解释一下怎么做吗?你正在寻找@Input,你将从调用组件的html中注入它。从html中注入值可能确实是更好的解决方案,但出于某种原因,我似乎无法让它工作。当我尝试您的第二个代码段时,标题值变得未定义。噢,一直以来都是“”。它应该是“”。
export class FilterComponent implements OnInit {
@Input() title: string;
}
<app-filter [title]="Title 1"></app-filter>