Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ionic 4、angular 8.3和sqlite预选复选框_Angular_Ionic Framework_Ionic4 - Fatal编程技术网

使用ionic 4、angular 8.3和sqlite预选复选框

使用ionic 4、angular 8.3和sqlite预选复选框,angular,ionic-framework,ionic4,Angular,Ionic Framework,Ionic4,我用的是angular 8.3,ionic 4。我无法预先选中(选中)复选框。它们都显示为未经检查。来自sqlite的数据是混合的(有些是真的,有些是假的)。以下是离子含量: <ion-content> <form *ngIf="frmEventTab" [formGroup]="frmEventTab"> <ion-grid> <div *ngFor="let work of works; let i=index">

我用的是angular 8.3,ionic 4。我无法预先选中(选中)复选框。它们都显示为未经检查。来自sqlite的数据是混合的(有些是真的,有些是假的)。以下是离子含量:

<ion-content>
  <form *ngIf="frmEventTab" [formGroup]="frmEventTab">
    <ion-grid>
      <div *ngFor="let work of works; let i=index">
          <ion-col col-1 size="2" class="ion-text-center" text-align: center>
            <ion-checkbox formControlName="chkConfirmed" (ionChange)="onChange(work.workId, 'chkConfirmed', $event.checked)" value="work.confirmed"></ion-checkbox>
          </ion-col>
        </ion-row>
      </div>
    </ion-grid>
  </form>
</ion-content>

谢谢。

尝试将
true
值添加到
FormControl
中要检查它的位置:

this.frmEventTab = this.formBuilder.group({
    chkConfirmed: new FormControl(true),
});

我想出来了。修复方法是不要在复选框上使用formControlName标记或value标记。还将整个$event发送回onChange:

<ion-checkbox [checked]="work.confirmed" (ionChange)="onChange(work.workId, 'chkConfirmed', $event)"></ion-checkbox>
这非常适合于从数据库(在表单创建期间)设置当前值,然后在onChange方法中更新值

注意:这是使用被动表单(不是模板驱动的表单)

注#2:这是一个“黑客”解决方案,因为从formControlName中删除会导致其值和所有其他控件的值不可用。因此,您必须在sqlite中创建一个update语句,以仅更新正在更改的当前复选框。(因为其他值不会存储在FormGroup中)

或者,您可以传递对象以获取该记录的所有值,如下所示:

<ion-checkbox [checked]="work.confirmed" (ionChange)="onChange(work, 'chkConfirmed', $event)"></ion-checkbox>

请注意,onChange事件现在传递整个记录:work(而不仅仅是传递work.workId。)现在您将拥有该记录的所有其他字段

如果有人知道一个更好的方法来做这一切使用反应形式,请让我知道

参考:


嗨,伊戈尔c谢谢你的帖子。然而,这不起作用。这段代码最后检查了所有的代码。我想根据“工作.确认”中的值检查它们。请查看html中的复选框:value=“work.confirmed”。它们只应基于功进行检查。已确认。@RobertSmith在使用反应式表单方法时,不应以这种方式传递值。初始值应在.ts文件中设置。我会更新我的答案谢谢你的建议!有没有办法在html中设置值?我宁愿把它们都放在那里,因为我已经在html中有了for循环。否则我有两个地方的代码。你可以使用模板驱动的表单。谢谢igor\u c。使用带有for循环的模板驱动器会涉及到什么?(因为我将显示多条记录)。对于“工作”中的每个项目,我也会有不止一种类型的复选框。我只是在上面的例子中简化了它。
onChange(workId, checkboxType, isChecked) {
    if(isChecked.detail.checked) {
      // its checked!
    }
}
<ion-checkbox [checked]="work.confirmed" (ionChange)="onChange(work, 'chkConfirmed', $event)"></ion-checkbox>