【问题标题】:TypeError: Cannot read property 'username' of undefined?TypeError:无法读取未定义的属性“用户名”?
【发布时间】:2016-05-08 19:52:43
【问题描述】:

我正在使用 Ionic 2 开发应用程序并遇到错误。当我删除 [(ngModel)]="register.username" 错误正在消失。

TypeError: Cannot read property 'username' of undefined in [register.username in RegisterPage@15:19]
<ion-navbar *navbar>
  <ion-title>Register</ion-title>
</ion-navbar>

<ion-content class="login-page">

  <ion-list>
    <div class="logo">
      <img src="img/appicon.svg">
    </div>

    <form #signupForm="ngForm" novalidate>
      <ion-item>
        <ion-label floating primary>Username</ion-label>
        <ion-input [(ngModel)]="register.username" ngControl="username" type="text" #username="ngForm" required>
        </ion-input>
      </ion-item>
      <p [hidden]="username.valid || submitted == false" danger padding-left>
        Username is required
      </p>

      <ion-item>
        <ion-label floating primary>Password</ion-label>
        <ion-input [(ngModel)]="register.password" ngControl="password" type="password" #password="ngForm" required>
        </ion-input>
      </ion-item>
      <p [hidden]="password.valid || submitted == false" danger padding-left>
        Password is required
      </p>

      <div padding>
        <button (click)="onSignup(signupForm)" type="submit" primary block>Create</button>
      </div>
    </form>
  </ion-list>

</ion-content>

注册.js

import { App, Page, NavController } from 'ionic/ionic';
@Page({
  templateUrl: 'build/pages/register/register.html'
})

export class RegisterPage {
  constructor(nav: NavController) {
    this.nav = nav;
  }

  onSignup(form) {
    // console.log(form);
    // if (form.valid) {
    //   this.nav.push();
    // }
  }
}

想知道我做错了什么吗?我应该阅读任何文件吗? (如果您想了解更多信息,请告诉我)

【问题讨论】:

    标签: javascript ecmascript-6 angular ionic2


    【解决方案1】:

    也许您的register 对象是异步加载的。为了防止这种情况,只需使用 Elvis 运算符:register?.username 或在表单周围使用 ngIf

    <form #signupForm="ngForm" novalidate *ngIf="register">
      <ion-item>
        <ion-label floating primary>Username</ion-label>
        <ion-input [(ngModel)]="register.username"
                   ngControl="username" type="text"
                   #username="ngForm" required>
        </ion-input>
      </ion-item>
      (...)
    </form>
    

    编辑

    register 对象设置为空对象应该可以解决您的问题:

    import { App, Page, NavController } from 'ionic/ionic';
    @Page({
      templateUrl: 'build/pages/register/register.html'
    })
    
    export class RegisterPage {
      constructor(nav: NavController) {
        this.nav = nav;
        this.register = {};
      }
    
      onSignup(form) {
        // console.log(form);
        // if (form.valid) {
        //   this.nav.push();
        // }
      }
    }
    

    希望对你有帮助, 蒂埃里

    【讨论】:

    • 谢谢蒂埃里,ngIf 消除了错误以及文本字段。注册?
    • 如何设置注册对象?来自 HTTP 调用。但不是,您可以在组件的构造函数中初始化为空对象:this.register = {}...
    猜你喜欢
    • 2019-07-27
    • 1970-01-01
    • 2021-08-03
    • 2022-01-01
    • 1970-01-01
    • 2020-02-11
    • 2021-03-12
    • 2018-12-18
    相关资源
    最近更新 更多