离子2 - 服务和modalCtrl

时间:2017-03-01 03:08:42

标签: angular ionic2

我是使用离子2的新手。我创建了一个服务,让我的所有过滤器(ModalCtrl)都带有自定义搜索输入和复选框(每个)。在那些我发送/获取参数之间,但不知道如何保持服务处于活动状态以等待直到解除(从ModalCtrl获取数据)被触发。

基本上所有都是从html调用filterPost函数开始的,它调用filterService(启动ModalCtrl),在用户选择过滤器后选择它发回选定的选项,但是我无法从filterPost中获取它。

我试图这样做,因为我需要不同区域的过滤器,所以我想重复使用它。

感谢您的帮助

filterPost.ts

filterPost(){
    let data = this.filtros.filterThePost();
    console.log(data); //Here i get immediately undefined, dont wait dismiss
    this.titlepost = data;
}

filterService.ts

public filterThePost(){
    let profileModal = this.modalCtrl.create(MyFilterPost, {
      id_title: this.id_title //send active id
    });
    profileModal.onDidDismiss(data => {
      //get data from modalCtrl, works nicely
      console.log("Got service: "+data, data.id, data.nombre);
      let info = {
        nombre: data.title,
        id: data.id
      }
      return info;
    });
    profileModal.present();                
}

myfilterpost.ts

saveFilter(id, name){       
    console.log("Selected: "+id, name);
    this.viewCtrl.dismiss({
        id: id,
        title: name
    });
}

1 个答案:

答案 0 :(得分:1)

您将从模式返回 Hashtable tmpData = new Hashtable(); public frmInputScore() { InitializeComponent(); InitEmployees(); if (dgvScoreList.DataSource == null) { dgvScoreList.DataSource = new DataTable(); } if (!File.Exists("tmpData.dat")) return; FileStream fs = new FileStream("tmpData.dat", FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); tmpData = (Hashtable)bf.Deserialize(fs); fs.Close(); tbEmployeeId.Text = tmpData["EmployeeId"].ToString(); cmbEmployeeName.SelectedValue = tmpData["EmployeeId"]; dtpGradeDate.Value =Convert.ToDateTime(tmpData["GradeDate"]); cbTopMost.Checked =Convert.ToBoolean(tmpData["TopMost"]); dgvScoreList.DataSource = tmpData["DataSource"]; } private void SaveConfig() { tmpData.Clear(); tmpData.Add("EmployeeId", cmbEmployeeName.SelectedValue); tmpData.Add("GradeDate", dtpGradeDate.Value); tmpData.Add("TopMost", cbTopMost.CheckState); tmpData.Add("DataSource", dt); FileStream fs = new FileStream("tmpData.dat", FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(fs, tmpData); fs.Close(); } DataTable dt = new DataTable(); private void dgvScoreList_UserAddedRow(object sender, DataGridViewRowEventArgs e) { dgvScoreList.CurrentRow.Cells["EmployeeName"].Value = cmbEmployeeName.Text; dgvScoreList.CurrentRow.Cells["EmployeeId"].Value = cmbEmployeeName.SelectedValue; dgvScoreList.CurrentRow.Cells["GradeDate"].Value = dtpGradeDate.Value; foreach (DataGridViewRow row in dgvScoreList.Rows) { dt.Rows.Add(row); } SaveConfig(); } 到服务。但是服务功能本身不返回任何内容。 您可以做的是向服务发送回调函数,该函数将在info回调中设置 filterPost.ts 类变量this.titlepost

尝试: 在filterPost.ts

onDidDismiss

在您的filterService.ts

setTitlePost(data:any){
  this.titlepost=data;
}

filterPost(){
    this.filtros.filterThePost(this.setTitlePost.bind(this));//send callback
    console.log(data); //Here i get immediately undefined, dont wait dismiss
    //this.titlepost = data;
}