Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度2:在组件内部使用@Input做一些事情_Angular - Fatal编程技术网

Angular 角度2:在组件内部使用@Input做一些事情

Angular 角度2:在组件内部使用@Input做一些事情,angular,Angular,如何在组件中使用@Input值 例如: <log-user [user]="user"></log-user> <log-user [user]="user"></log-user> 任何帮助都会很好!!提前谢谢 在施工时间,@输入值尚未设置。Angular2如何在实际构建组件之前设置@Input值 您必须等待组件被初始化;意味着所有的@输入值都已设置。您可以通过实现OnInit接口来实现这一点 因此,要修复您的示例: <log-user

如何在组件中使用@Input值

例如:

<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() {

  }
}