Ionic2,Angular2:[(ngModel)] for ion-checkbox或html复选框?

时间:2017-06-12 16:23:16

标签: html5 checkbox ionic2 angular2-forms persist

在下列情况下,[(ngModel)]应该是什么,以便我可以保持幻灯片中复选框的状态?我需要在选中复选框时从一张幻灯片滑动到另一张幻灯片,但是当我点击上一张时,状态需要保留。

这是我用于单选按钮的内容。我只是将单选按钮代码更改为复选框但它不起作用。所以我删除了[value]属性,现在如果我选中一个复选框,则所有这些都被检查。

    <ion-content padding>

      <ion-slides>
        <ion-slide *ngFor="let question of questions; let i = index">
          <h1>{{ question.text }}</h1>
           <span *ngIf="question.type=='singlecorrect'>
          <ion-list radio-group [(ngModel)]="question.answer">
            <ion-item no-lines no-padding *ngFor="let choice of question.choices">
              <ion-label>{{ choice.choiceText }}</ion-label>
              <ion-radio [value]="choice"></ion-radio>
            </ion-item>
          </ion-list>
          </span>

           <span *ngIf="question.type=='singlecorrect'>
          <ion-list checkbox-group [(ngModel)]="question.answer">
            <ion-item no-lines no-padding *ngFor="let choice of question.choices">
              <ion-label>{{ choice.choiceText }}</ion-label>
              <ion-checkbox></checkbox>  // ERROR : no value accessor found. 
            </ion-item>
          </ion-list>
          </span>

          <ion-row margin-top>
            <ion-col>
              <button (click)="showPrevious()" ion-button text-only [disabled]="i === 0" >Previous</button>
            </ion-col>
            <ion-col>
              <button [disabled]="!question.answer" *ngIf="i < questions.length - 1" (click)="showNext()" ion-button text-only >Next</button>
              <button [disabled]="!question.answer" *ngIf="i === questions.length - 1" (click)="showNext()" ion-button text-only >Submit</button>
            </ion-col>
          </ion-row>

        </ion-slide>
      </ion-slides>

</ion-content>

我将所选的选项存储在名为“answer”的数组中。请参阅:Angular2,Typescript: How to put the radio button checked when in an array which displays one element per page? 有人能帮我吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

我不确定所有问题是应该使用复选框还是其中一些问题。我修改了之前的plu​​nker,将一些问题设置为多项选择题,剩下的就是单选题。请查看 new version of the plunker

这是最终结果:

ionic demo

在演示中,现在每个问题都具有以下属性:

 {
    text: 'Question 1',
    multiple: false,
    choices: [...],
    answer: null
  }

如果问题允许多个答案,则使用数组初始化answer属性,每个可用选项都有一个项目。

// Initialize the answers
this.questions.forEach(question => {
  if(question.multiple) {
    // Initialize an array with as many elements as the number of choices
    question.answer = new Array(question.choices.length);
  }
});

然后在视图中我们相应地渲染广播项目或复选框项目:

<ion-slides>
    <ion-slide *ngFor="let question of questions; let i = index">
      <h1>{{ question.text }}</h1>

        <!-- Single choice: radio items -->
        <div *ngIf="!question.multiple">
          <ion-list radio-group [(ngModel)]="question.answer">
            <ion-item no-lines no-padding *ngFor="let choice of question.choices">
              <ion-label>{{ choice.choiceText }}</ion-label>
              <ion-radio [value]="choice"></ion-radio>
            </ion-item>
          </ion-list>
        </div>

        <!-- Multiple choice: checkbox items -->
        <div *ngIf="question.multiple">
          <ion-item no-lines no-padding *ngFor="let choice of question.choices; let i = index">
            <ion-label>{{ choice.choiceText }}</ion-label>
            <ion-checkbox [(ngModel)]="question.answer[i]"></ion-checkbox>
          </ion-item>
        </div>


      <span style="font-size: 1.2rem;">Selected answer: {{ question.answer | json }}</span>

      <ion-row margin-top>
        <ion-col>
          <button (click)="showPrevious()" ion-button text-only [disabled]="i === 0" >Previous</button>
        </ion-col>
        <ion-col>
          <button [disabled]="!question.answer" *ngIf="i < questions.length - 1" (click)="showNext()" ion-button text-only >Next</button>
          <button [disabled]="!question.answer" *ngIf="i === questions.length - 1" (click)="showNext()" ion-button text-only >Submit</button>
        </ion-col>
      </ion-row>

    </ion-slide>
  </ion-slides>