简体   繁体   English

如何将* ngif用于[值]?

[英]How to use *ngif for [value]?

I have below html code for add business page in ionic 3. Where I'm getting input data using [(ngModel)]="businessData.name" . 我下面有用于在ionic 3中添加业务页面的html代码。在哪里使用[(ngModel)]="businessData.name"获取输入数据。 For editing the business I used same page where I'm filling all inputs with [value]="savedbusinessData.name" whichever data is getting through mybusiness api like business name or email etc. But now editing business is working fine but when new user go to add business page I'm getting ERROR TypeError: Cannot read property 'name' of undefined because of [value]="savedbusinessData.name" . 为了编辑业务,我使用了相同的页面,在该页面上,我所有的输入都使用[value]="savedbusinessData.name"填充,无论数据是通过mybusiness api获得的,例如公司名称或电子邮件等。但是现在编辑业务可以正常使用,但是当新用户使用时去添加业务页面我收到ERROR TypeError: Cannot read property 'name' of undefined由于[value]="savedbusinessData.name" ERROR TypeError: Cannot read property 'name' of undefined For solving this I tried *ngIf="!savedbusinessData == ''" using this input got disappear. 为了解决这个问题,我尝试使用此输入的*ngIf="!savedbusinessData == ''"消失了。 So how can I use ngif here or any other solution? 那么如何在这里使用ngif或任何其他解决方案?

<ion-content padding>
    <div class="addbusiness">

        <ion-item>
            <p (click)="addCata()">Select Category</p>
                <!-- <p class="adedcat">{{htmlContent}}</p> -->
                <ion-tags-input  [separatorStr]="','" [once]="'true'" [canBackspaceRemove]="false" [canEnterAdd]="false" [(ngModel)]="catatags" (onChange)="onChange($event)"></ion-tags-input>
            <!-- <p (click)="clearcat()">Clear All</p> -->
        </ion-item>

       <ion-item> 
        <ion-input *ngIf="!savedbusinessData == ''" [value]="savedbusinessData.name" [(ngModel)]="businessData.name" type="text" placeholder="Name"></ion-input>
       </ion-item>
       <ion-item> 
        <ion-input  [value]="savedbusinessData.contact" [(ngModel)]="businessData.contact" type="number" placeholder="Contact Number"></ion-input>
       </ion-item>
       <ion-item> 
        <ion-input  [value]="savedbusinessData.address" [(ngModel)]="businessData.address" type="text" placeholder="Adress"></ion-input>
      </ion-item>
       <ion-item> 
        <ion-input  [value]="savedbusinessData.website" [(ngModel)]="businessData.website" type="text" placeholder="Website"></ion-input>
      </ion-item>
        <ion-item> 
        <ion-input  [value]="savedbusinessData.email" [(ngModel)]="businessData.email" type="email" placeholder="Email"></ion-input>
      </ion-item>
        <ion-item> 
        <ion-input  [value]="savedbusinessData.about" [(ngModel)]="businessData.about" type="text" placeholder="About"></ion-input>
      </ion-item>
        <ion-item> 
        <ion-input  [value]="tags" [(ngModel)]="businessData.tags" type="text" placeholder="Tags"></ion-input>
      </ion-item>         
        <button class="busiadd" (click)="addBusiness()" ion-button>Submit</button>

  </div>
</ion-content>

I highly recommend using Angulars reactive forms. 我强烈建议使用Angulars反应形式。 Import ReactiveFormsModule in the related module. 在相关模块中导入ReactiveFormsModule Remove all [(ngModel)] s and put all input s in a form tag like this 删除所有[(ngModel)]并将所有input放入这样的表单标签中

<form [formGroup]="myForm" (ngSubmit)="save(myForm.value)"></form>

Then remove the [value] properties. 然后删除[value]属性。 Add a formControlName="name" / "contact" etc. to the input tags. 将formControlName =“ name” /“ contact”等添加到输入标签。 In your TS create it as follows 在您的TS中创建它,如下所示

myForm: FormGroup;

constructor(private fb: FormBuilder) {
  this.myForm = this.fb.group({
    name: '',
    contact: '',
    // ...etc
  });
}

When your data arrives you can simply patch the form with 当您的数据到达时,您可以使用

this.myForm.patchValue(data);

It patches only matching attributes. 它仅修补匹配的属性。 Others will be ignored. 其他人将被忽略。 Also don't forget to create a save function from where you can handle the form data. 另外,不要忘记从此处可以处理表单数据的位置创建保存功能。

function save(formData: YourDataType) {
  // handle formData here
}

Use ?. 采用 ?。 for null check. 空检查。

[value]="savedBusinessData?.name"

If you want to hide the input use.. 如果要隐藏输入,请使用。

<ion-item *ngIf="savedBusinessData !== undefined">
  <ion-input [value]="savedBusinessData?.name"></ion-input>
</ion-item>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM