2016-12-14 21 views
2

これを読み込むたびに、以前に保存した値をローカル記憶域からこの形式に変換する際に、Ionic 2で構築されたモデル駆動型に関連しています。Ionic 2 - モデル駆動型の設定値

Ionicのストレージサービスを使用して保存することができましたが、この保存されたデータをフォームに割り当てられませんでした。私は次のエラーを取得する:

TypeError: setting a property that has only a getter

これはこれまでのところ、私のコードです:

import { Component } from '@angular/core'; 
import { Validators, FormBuilder, FormGroup } from '@angular/forms'; 
import { NavController, NavParams } from 'ionic-angular'; 
import { Storage } from '@ionic/storage'; 

@Component({ 
    selector: 'page-survey', 
    templateUrl: 'survey.html', 
    providers: [Storage] 
}) 

export class Survey { 
    form: FormGroup; 
    networkStatus: boolean = true; 

    constructor(public navCtrl: NavController, public navParams: NavParams, 
       public formBuilder: FormBuilder, private storage: Storage) { 

    // localstorage 
    this.storage = storage; 

    this.form = formBuilder.group({ 
     "isPropertyOwner": ["", Validators.required], 
     "familyMembers": ["", Validators.compose([Validators.required, Validators.minLength(0)])], 
     "ownsProperty": ["", Validators.required], 
     "pragueIdentify": ["", Validators.required], 
     "pesticidesUsage": ["", Validators.required], 
     "propertyLevel": ["", Validators.required] 
    }); 

    /* Check if form has been changed */ 
    this.form.valueChanges.subscribe(data => 
     this.storage.set('survey', data) 
    ); 
    } 

    ngAfterViewInit() { 
    // checking if there's something saved, then... 
    if(this.storage.get('survey')) { 
     this.storage.get('survey').then((data) => { 
     console.log('This is ', data); 
     this.form.value = data; 
     }); 
    } 
    } 

    onSubmit(form) { 
    console.log(form); 
    this.storage.clear().then(() => { 
     console.log('Keys have been cleared'); 
    }); 

    } 
} 

私は、このフォームに保存された属性値を可能性がどのように?

答えて

6

FormGroupのプロパティvalueは、あなたがそれを直接編集することはできませんを意味し、読み取り専用のプロパティです。それぞれ関数を使用してそれぞれFormControlを取得し、setValue()関数を使用してその値を変更する必要があります。とにかく、これに代えて:

this.form.get('isPropertyOwner').setValue(data.isPropertyOwner); 
this.form.get('familyMembers').setValue(data.familyMembers); 
this.form.get('ownsProperty').setValue(data.ownsProperty); 
this.form.get('pragueIdentify').setValue(data.pragueIdentify); 
this.form.get('pesticidesUsage').setValue(data.pesticidesUsage); 
this.form.get('propertyLevel').setValue(data.propertyLevel); 
+1

これは期待通りに機能しました!非常にありがとう、Хвалавам@StefanSvkota –

0

constructorからを既にconstructor paramsと宣言しているので、2行以下を削除して確認してください。

// localstorage 
this.storage = storage; 
+0

同じエラー:

this.form.value = data; 

あなたはこれを使用する必要があります。私はこれが問題ではないと思います。なぜなら、私はストアした値をストアしたり取り出したりするのに問題がないからです。私は値が正しく格納されていることをコンソールから見ることができますが、私はそれを設定することはできません。 –

関連する問題