如何限制用户从Ionic的项目列表中仅选择一项

时间:2019-02-06 10:21:31

标签: ionic-framework ionic3

我正在Ionic App中工作,并且显示了项目列表,其中有用于选择项目的复选框。用户只能选择一个项目,但问题是,在我的项目列表中,用户可以选择所有项目。

这是我的 shopping.html

<ion-list *ngFor="let itm of shippingdetails">
          <ion-item-divider>
            <ion-checkbox slot="end" [disabled]="isCheckboxDisabled" (ionChange)="selectCP(itm)"></ion-checkbox>
            <!-- <ion-radio slot="start"></ion-radio> -->
            <!-- <ion-toggle slot="start"></ion-toggle> -->
            <ion-label>
            <h2>{{itm.name}}</h2>
            <p>{{itm.mobile}}</p>
            <p>{{itm.state}}, {{itm.city}}</p>
            <p>{{itm.address}}</p>
            <p>Pincode: {{itm.pincode}}</p>
            </ion-label>
            <button ion-button outline item-end>
              <ion-icon name="create"></ion-icon>
            </button>
            <button ion-button outline item-end>
              <ion-icon name="trash"></ion-icon>
            </button>
          </ion-item-divider>
</ion-list>

在此,我显示了带有项目的复选框,用户可以在其中选择项目。

这是我的 shopping.ts

isCheckboxDisabled:boolean=false;
selectCP(itm){

}

我无法对此做出合理的解释。在我的HTML中,用户可以选择所有项目。非常感谢您的帮助。

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以改用ion-radio

<ion-list>
  <ion-radio-group>
    <ion-item *ngFor="let itm of shippingdetails">
      <ion-label>{{itm.name}}</ion-label>
      <ion-radio value="{{itm.id}}"></ion-radio>
    </ion-item>
  </ion-radio-group>
</ion-list>

答案 1 :(得分:1)

您可以按照以下步骤进行操作。

HTML

<ion-content padding>
<ion-list *ngFor="let itm of shippingdetails">
          <ion-item-divider>
            <ion-checkbox slot="end" checked="{{itm.isChecked}}" (ionChange)="selectCP($event, itm)"></ion-checkbox>
            <ion-label>
            <h2>{{itm.name}}</h2>
            <p>{{itm.mobile}}</p>
            </ion-label>
            <button ion-button outline item-end>
              <ion-icon name="create"></ion-icon>
            </button>
            <button ion-button outline item-end>
              <ion-icon name="trash"></ion-icon>
            </button>
          </ion-item-divider>
</ion-list>
</ion-content>

TS

import { Component } from '@angular/core';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html'
})
export class HomePage {

  shippingdetails: any = [];

  constructor() {

    this.shippingdetails = [
      { name: 'Raghav', mobile: '0771111111', isChecked: false },
      { name: 'Rahul', mobile: '0772222222', isChecked: false },
      { name: 'Virat', mobile: '0773333333', isChecked: false },
      { name: 'Sanga', mobile: '0774444444', isChecked: false },
    ];

  }

  selectCP(event, item) {

    if (event.checked) {

      this.shippingdetails.forEach(shpItm => {

        if (shpItm.name === item.name) {
          shpItm.isChecked = true;
        } else {
          shpItm.isChecked = false;
        }
      });
    }
    if (!event.checked) {
        this.shippingdetails.forEach(shpItm => {

        if (shpItm.name === item.name) {
          shpItm.isChecked = false;
        }
      });
    }

  }

}

我认为这会有所帮助。找到工作的demo here