I would prefer storage from ionic (https://ionicframework.com/docs/storage/), but this should work for localstorage.
Example on StackBlitz:
home.html
<ion-header>
<ion-navbar>
<ion-title>Home</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<form #userForm="ngForm">
<ion-item>
<ion-label floating>First Name</ion-label>
<ion-input type="text" name="firstName" [(ngModel)]="userData.firstName"></ion-input>
</ion-item>
<ion-item>
<ion-label floating>Last Name</ion-label>
<ion-input type="text" name="lastName" [(ngModel)]="userData.lastName"></ion-input>
</ion-item>
</form>
</ion-content>
home.ts
import { Component, ViewChild } from '@angular/core';
import { NgForm } from '@angular/forms';
import { NavController } from 'ionic-angular';
import { Subscription } from 'rxjs/Subscription';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
@ViewChild('userForm') form: NgForm;
storageSub: Subscription;
userData = {
firstName: '',
lastName: ''
};
ionViewDidLoad() {
const localData = localStorage.getItem('userData');
try {
if (localData) {
this.userData = JSON.parse(localData);
console.log('Data loaded', localData);
}
} catch (error) { }
// If not delayed, it will unnecessarily save the loaded files
setTimeout(() => {
this.storageSub = this.form.valueChanges.subscribe(userData => {
localStorage.setItem('userData', JSON.stringify(userData));
console.log('Data saved', JSON.stringify(userData));
});
}, 0);
}
ionViewWillUnload() {
this.storageSub.unsubscribe();
}
}