我是使用离子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
});
}
答案 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;
}