sai*_*y2k 7 typescript ionic-framework ionic3 angular
我EventFeedbackComponent通过ModalController 显示一个Component .现在我想订阅一个Subjectin EventFeedbackComponent.如何访问组件实例,以实现我的目标.
我目前的代码:
let modal = this.modalCtrl.create(EventFeedbackComponent);
modal.present();
// This is not working. Throws the error "ERROR TypeError: Cannot read property 'subscribe' of undefined"
modal._component.feedbackSubmit.subscribe(feedbackResponse => {
console.log(feedbackResponse);
});
Run Code Online (Sandbox Code Playgroud)
文档在这方面没有帮助:https://ionicframework.com/docs/api/components/modal/ModalController/
我的用例:
Service,我需要获得反馈.EventFeedbackComponent 有控件来获取单个事件的反馈.feedbackSubmit通过来监听事件Subjectfeedback,我会显示一个成功Toast并在Service中切换我的服务变量以显示下一个事件.yur*_*zui 19
离子模态组件使我们有机会用一些参数关闭对话:
modal.ts
constructor(public viewCtrl: ViewController) {
this.prop = params.get('prop');
}
dismiss() {
this.viewCtrl.dismiss({ test: '1' });
}
Run Code Online (Sandbox Code Playgroud)
在揭幕战中我们应该:
opener.ts
let modal = this.modalCtrl.create(TestComponent, { 'prop': 'prop1' });
modal.onDidDismiss(data => {
alert('Closed with data:' + JSON.stringify(data));
});
Run Code Online (Sandbox Code Playgroud)
如果这对你来说还不够
您可以使用ViewController::emit方法将数据发送到开启者
modal.ts
constructor(public viewCtrl: ViewController) {}
sendFeedBack() {
this.viewCtrl.emit({ someData: '2' });
}
Run Code Online (Sandbox Code Playgroud)
opener.ts
let modal = this.modalCtrl.create(TestComponent, { 'prop': 'prop1' });
modal.onDidDismiss(data => {
alert('Closed with data:' + JSON.stringify(data));
});
modal.present().then(result => {
modal.overlay['subscribe']((z) => {
alert(JSON.stringify(z));
})
});
Run Code Online (Sandbox Code Playgroud)
由于我们可以将任何参数传递给模态,然后让我们传递回调函数:
opener.ts
let modal = this.modalCtrl.create(TestComponent, {
'prop': 'prop1',
onFeedBack: (data) => {
alert('Input callback' + JSON.stringify(data));
}
});
Run Code Online (Sandbox Code Playgroud)
modal.ts
onFeedBack: Function;
constructor(params: NavParams) {
this.onFeedBack = params.get('onFeedBack');
}
sentThroughInputCallback() {
this.onFeedBack({ s: '2' });
}
Run Code Online (Sandbox Code Playgroud)
如果您仍想获得组件实例,那么:
只有在创建组件实例后才能获取组件实例:
opener.ts
let modal = this.modalCtrl.create(TestComponent, { 'prop': 'prop1' });
modal.present().then(result => {
const testComp = modal.overlay['instance'] as TestComponent;
testComp.feedbackSubmit.subscribe(() => {
alert(1);
})
});
Run Code Online (Sandbox Code Playgroud)
在Ng-run示例中查看它
| 归档时间: |
|
| 查看次数: |
6151 次 |
| 最近记录: |