I decided to ask here I've been looking at google the whole day for an answer but I can't seem to understand on how to implement it. So basically, what I want to do is every time I insert data from a modal once it closes it would auto update the list of its parent view. In the past I would go about this by setting a timeout function upon researching I've stumbled upon Observables. Now what I want to know is how I can implement this on my current setup.
Here is my component.ts
import { Component } from '@angular/core';
import { NavController, NavParams, ModalController,FabContainer } from 'ionic-angular';
import { ModalCreateNewDirectoryPage } from '../../pages/modal-create-new-directory/modal-create-new-directory';
import {PopupUploadCsvPage} from '../../pages/popup-upload-csv/popup-upload-csv';
import { BeaconRestApiProvider } from '../../providers/beacon-rest-api/beacon-rest-api';
import {ModalShowPhonebookDirectoryPage} from '../../pages/modal-show-phonebook-directory/modal-show-phonebook-directory';
import { Observable } from 'rxjs/Observable';
import { AsyncPipe } from '@angular/common';
/**
 * Generated class for the PhonebookPage page.
 *
 * See http://ionicframework.com/docs/components/#navigation for more info
 * on Ionic pages and navigation.
 */
 @Component({
    selector: 'page-phonebook',
    templateUrl: 'phonebook.html',
 })
 export class PhonebookPage {
    items: Array<{title: string, icon:string}>;
    infos:any;
    fileHolder:any;
    choice:boolean;
    contacts:any;
    constructor(public navCtrl: NavController, public navParams: NavParams, public newDirectoryOpenModal:ModalController, public beaconProvider:BeaconRestApiProvider, public uploadPopupDirectoryModal: ModalController, public showPhoneBookDirectoryModal: ModalController ) {
        this.getPhonebook();
    }
    ionViewDidLoad() {
        console.log('ionViewDidLoad PhonebookPage');
    }
    createNewDirectory(fab: FabContainer){
        console.log('This button creates a new directory');
        const showCreateDirectoryModal = this.newDirectoryOpenModal.create(ModalCreateNewDirectoryPage);
        fab.close();
        showCreateDirectoryModal.present(); 
    }
    uploadNewDirectory(fab: FabContainer){
        const showuploadPopup = this.uploadPopupDirectoryModal.create(PopupUploadCsvPage);
        fab.close();
        showuploadPopup.present(); 
    }
    getPhonebook() {
        this.beaconProvider.getPhoneBookDirectories()
        .then(data => {
            this.infos = data;
        }, (err) => {
            console.log(err);
        });
    }
    phonebookIdentity(phonebook){
        var phonebook_id = phonebook.phonebook_id;
        this.beaconProvider.showPhonebookDirectoryList(phonebook_id)
        .then(data => {
            const showDirectoryList = this.showPhoneBookDirectoryModal.create(ModalShowPhonebookDirectoryPage,{list:data});
            showDirectoryList.present();
        }, (err) => {
            console.log(err);
        });
    }
 }
and my modal component.ts which controls the modal form
import { Component, OnInit } from '@angular/core';
import { NavController, NavParams, ViewController,LoadingController,ToastController} from 'ionic-angular';
import { FormGroup, FormArray, FormBuilder, FormControl, Validators } from '@angular/forms';
import { BeaconRestApiProvider } from '../../providers/beacon-rest-api/beacon-rest-api';
/**
 * Generated class for the ModalCreateNewDirectoryPage page.
 *
 * See http://ionicframework.com/docs/components/#navigation for more info
 * on Ionic pages and navigation.
 */
 @Component({
    selector: 'page-modal-create-new-directory',
    templateUrl: 'modal-create-new-directory.html',
 })
 export class ModalCreateNewDirectoryPage implements OnInit  {
    public createDirectoryForm: FormGroup;
    //directoryInfo: { phonebook_name: string, number: string, personName: string, age: string, address: string} = { phonebook_name:'', number: '', personName: '', age: '', address:''};
    constructor(public navCtrl: NavController, public navParams: NavParams, public newDirectoryView:ViewController, public formBuilder: FormBuilder, public beaconProvider:BeaconRestApiProvider, public pageLoader: LoadingController, public toast : ToastController) {
    }
  /*ngOnInit(){
        this.createDirectoryForm = this.formBuilder.group({
            directoryName:['',Validators.required],
            fields: this.formBuilder.array([
                this.initFormChild(),
            ])
        });
    }*/
    ngOnInit(){
        this.createDirectoryForm = this.formBuilder.group({
            directoryName:['',Validators.required],
            fields:this.formBuilder.array([
                this.initField(),
                ])
        });
    }
    initField() {
        return this.formBuilder.group({
            number:['',Validators.required],
            personName: ['',Validators.required],
            age:['',Validators.required],
            address:['',Validators.required],
        });
    }
    addField() {
        const control = <FormArray>this.createDirectoryForm.controls['fields'];
        control.push(this.initField());
    }
    removeField(i: number) {
        const control = <FormArray>this.createDirectoryForm.controls['fields'];
        control.removeAt(i);
    }
    save(form){
        console.log(form);
        var i;
        var phonebookName = form.controls.directoryName._value;
        var fields_array = [];
        var record_set = [];
        var fields = form.controls.fields.controls;
        phonebookName = {"phonebook_name":phonebookName};
        var address,age,number,personName;
        var directory_header = ['number','name','age','address'];
        record_set.push(directory_header);
        for(i = 0; i < fields.length ; i ++ ){
            if(fields[i]._value.address !=""){
                address = fields[i]._value.address;
            }
            else{
                address = '_';
            }
            if(fields[i]._value.age !=""){
                age = fields[i]._value.age;
            }
            else{
                age = '_';
            }
            if(fields[i]._value.number !=""){
                number = fields[i]._value.number;
            }
            else{
                number = '_';
            }
            if(fields[i]._value.personName !=""){
                personName = fields[i]._value.personName;
            }
            else{
                personName = '_';
            }
            fields_array = [number,personName,age,address];
            record_set.push(fields_array);
            //console.log(i.controls.number._value);
            //console.log(i.controls.personName._value);
        }
        var phonebookdetails_array = record_set;
        this.beaconProvider.getPhonebookId(phonebookName).then((res) => {
            var phonebookId = res;
            var manual_phonebook_array = {"phonebook_id":phonebookId,"phonebook_content":phonebookdetails_array};
            let loadingPage = this.pageLoader.create({
                content: 'Processing your request...',
                showBackdrop:false
            });
            loadingPage.present();
            this.beaconProvider.addPhonebookDirectory(manual_phonebook_array).then((res)=>{
                setTimeout(() => {
                    loadingPage.dismiss();
                    this.toast.create({
                    message: `Phonebook Directory Added`,
                    duration: 3000,
                    position: "top",
                }).present();
                this.closeNewDirectoryModal();
                }, 5000);
            },err=>{
                console.log(err);
            })
        }, (err) => {
            console.log(err);
        });
    }
    ionViewDidLoad() {
        console.log('ionViewDidLoad ModalCreateNewDirectoryPage');
    }
    closeNewDirectoryModal(){
        this.newDirectoryView.dismiss();
    }
}
I think this is enough to show what I want to happen but if not let me know.
 
     
    