无法读取属性' UserName'在Angular 2中未定义

时间:2018-04-16 10:25:35

标签: angular

为什么我在组件中定义错误时会继续出现Cannot read property 'UserName' of undefined错误。使用' elvis运算符'在HTML代码中没有做到这一点。请查看我收到此错误的代码:

user.model.ts

export class User {
    UserName: string;
    Password: string;
    Email: string;
    FirstName: string;
    LastName: string;
}

登录-up.component.ts

export class SignUpComponent implements OnInit {

  user: User;

  constructor() { }

  ngOnInit() {
  }

}

登录-up.component.html

<form class="col s12 white" #userRegistrationForm="ngForm">

<div class="row">
    <div class="input-field col s6">
        <input class="validate" type="text" name="UserName" #UserName="ngModel" [(ngModel)]="user.UserName" required  minlength="3">
        <label>Username</label>
    </div>

    <div class="input-field col s6">
    <input type="password" name="Password" #Password="ngModel" [(ngModel)]="user.Password"> 
    <label>Password</label>
    </div>
</div>

<div class="row">

</div>

</form>

使用elvis运算符: <input class="validate" type="text" name="UserName" #UserName="ngModel" [(ngModel)]="user?.UserName" required minlength="3">

5 个答案:

答案 0 :(得分:0)

您需要初始化用户对象,只需指定一个新的用户对象

user: User = new User();

答案 1 :(得分:0)

如果您使用的是export class User ...,您可以执行user: User = new User();

答案 2 :(得分:-1)

在你的model.ts中,你可以初始化属性。

        export class User 
      {
        UserName: string="";
        Password: string="";
        Email: string="";
        FirstName: string="";
        LastName: string="";
      }

最佳方式是将用户注入您的组件。

providers:[User]

constructor(private user:User);

作为先决条件,您应该将您的课程装饰为@Injectable()

答案 3 :(得分:-1)

在角度2+中,你必须importexport ...的班级 所以 - 您必须导入用户和
 然后初始化user:User=new User();

答案 4 :(得分:-1)

宣布时的新模型。

而不是

user: User;

<强>写

user: User = new User();

声明变量作为角度模型的最佳做法是在声明时声明变量,除非有时。