Angular 角度2:在组件内部使用@Input做一些事情
如何在组件中使用@Input值 例如:Angular 角度2:在组件内部使用@Input做一些事情,angular,Angular,如何在组件中使用@Input值 例如: <log-user [user]="user"></log-user> <log-user [user]="user"></log-user> 任何帮助都会很好!!提前谢谢 在施工时间,@输入值尚未设置。Angular2如何在实际构建组件之前设置@Input值 您必须等待组件被初始化;意味着所有的@输入值都已设置。您可以通过实现OnInit接口来实现这一点 因此,要修复您的示例: <log-user
<log-user [user]="user"></log-user>
<log-user [user]="user"></log-user>
任何帮助都会很好!!提前谢谢 在施工时间,
@输入
值尚未设置。Angular2如何在实际构建组件之前设置@Input
值
您必须等待组件被初始化;意味着所有的@输入值都已设置。您可以通过实现OnInit
接口来实现这一点
因此,要修复您的示例:
<log-user [user]="user"></log-user>
<log-user [user]="user"></log-user>
您也可以只在组件上创建ngOnInit
方法而不实现接口,但是通过导入OnInit
接口,Typescript编译器可以确保您不会犯打字错误
各国:
实现此接口以在
指令的数据绑定属性已初始化
在指令的数据绑定属性之后立即调用ngOnInit
第一次被检查过,在它的任何孩子之前
已经检查过了。当指令被激活时,它只被调用一次
实例化
经过进一步的研究,我发现了这篇文章
所以答案其实很简单。因为在本例中,用户
是来自API调用的对象,所以在组件初始化时它是未定义的(希望我这样说是正确的)。。使用*ngIf
可以解决以下问题:
由于我们的角度组件是带有@Component()装饰器的ES6类,因此我们能够利用TS访问器拦截注入值,如下所示:
主要区别在于,我们不是装饰属性,而是装饰setter
更多细节
谢谢您的时间,但我已经尝试过了,它仍然记录为未定义?另外,我没有传递对象,而是尝试只传递一个字符串:
。这将在组件内部工作并被记录。那么,以我尝试的方式传入对象是否有问题@洛德维克诺:这没什么错。它必须在控制器实例化之前存在。我添加了一个注释来解决这个问题。这种方法不起作用。我完全按照示例中所示进行了操作。这一点很好。我在我的答案中添加了一条注释,说明了这一点,这样有相同问题的人可以一次性得到完整的答案。谢谢
<log-user [user]="user"></log-user>
export class LogUserComponent {
private _user:any;
get user() {
return this._user;
}
@Input()
set user( user:any) {
// to catch undefined user
if(!user) return;
this._user = user;
// modify the user here example below
// this._user = 'X' + user;
}
constructor() {
}
}