Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度:当再次导航到页面时,如何重新加载页面或触发函数?_Angular_Typescript_Ionic4 - Fatal编程技术网

Angular 角度:当再次导航到页面时,如何重新加载页面或触发函数?

Angular 角度:当再次导航到页面时,如何重新加载页面或触发函数?,angular,typescript,ionic4,Angular,Typescript,Ionic4,我有2页,第1页是日历视图,第2页是向日历中添加事件的表单。当我从表单页面添加事件、存储事件并重定向回日历页面时,日历页面将保持为空,直到页面重新加载或应用程序重新启动。因此,我需要一种方法来触发一些代码来填充日历,将添加的事件传递回日历视图,或者重新加载页面。最好是第一种选择。我该怎么做呢?从第2页返回后,如何告知要触发的代码 日历页 从“/../modals/appointment list/appointment list.page”导入{appointmentlistmodel}; 从“

我有2页,第1页是日历视图,第2页是向日历中添加事件的表单。当我从表单页面添加事件、存储事件并重定向回日历页面时,日历页面将保持为空,直到页面重新加载或应用程序重新启动。因此,我需要一种方法来触发一些代码来填充日历,将添加的事件传递回日历视图,或者重新加载页面。最好是第一种选择。我该怎么做呢?从第2页返回后,如何告知要触发的代码

日历页

从“/../modals/appointment list/appointment list.page”导入{appointmentlistmodel};
从“/../modals/add event/add event.page”导入{AddEventPage};
从'@angular/core'导入{Component,ViewChild,OnInit,Inject,LOCALE_ID};
从“ionic2日历/日历”导入{CalendarComponent};
从'@ionic/angular'导入{AlertController,ModalController};
从'@ionic/Storage'导入{Storage};
从“../providers.service”导入{ProvidersService};
从“../events.service”导入{EventsService};
@组成部分({
选择器:“应用程序日历”,
templateUrl:'calendar.page.html',
样式URL:['calendar.page.scss'],
})
导出类CalendarPage实现OnInit{
构造函数(){}
重载事件(){
//重新加载事件逻辑
}
}
从“/../add event/add event.page”导入{AddEventPage};
从“@angular/core”导入{NgModule};
从“@angular/common”导入{CommonModule};
从'@angular/forms'导入{FormsModule};
从'@ionic/angular'导入{IonicModule};
从'@angular/router'导入{RouterModule};
从“./calendar.page”导入{CalendarPage};
从“ionic2日历”导入{NgCalendarModule};
从“../add event/add event.module”导入{AddEventPageModule};
从“../modals/appointment list/appointment list.module”导入{AppointmentListModalModule};
从“../modals/add event/add event.module”导入{addeventmodule};
@NGD模块({
进口:[
公共模块,
FormsModule,
离子模块,
任命列表模块,
附加模块,
RouterModule.forChild([
{
路径:“”,
组件:日历页
}
]),
NGN日历模块
],
声明:[日历页]
})
导出类CalendarPageModule{}
从'@angular/core'导入{Component,OnInit,EventEmitter,Output,Input};
从'@ionic/Storage'导入{Storage};
从“../events.service”导入{EventsService};
从“@angular/Router”导入{Router}
@组成部分({
选择器:“应用程序添加事件”,
templateUrl:'./add event.page.html',
样式URL:['./添加事件.page.scss'],
})
出口类附加页{
建造师(
私人s:存储,
私有事件服务:事件服务,
专用路由器(路由器){
这个存储=s;
}
addEvent(){
//保存表单中添加的事件的逻辑
}
}
从'@angular/core'导入{NgModule};
从“@angular/common”导入{CommonModule};
从'@angular/forms'导入{FormsModule};
从'@ionic/angular'导入{IonicModule};
从'@angular/router'导入{RouterModule};
从“./add event.page”导入{AddEventPage};
@NGD模块({
进口:[
公共模块,
FormsModule,
离子模块,
RouterModule.forChild([
{
路径:“”,
组件:AddEventPage
}
])
],
声明:[
附加页
]
})
导出类AddEventPageModule{}

我只需要知道如何从角度使用进程,让页面知道如何做一些事情。

您有多个选项,这里有两个选项

1-创建一个服务,其中包含Observable和BehaviorSubject以及一个notify方法,然后让您的日历comp订阅该服务Observable,以您的形式调用service.notify并传递数据(或让服务再次获取数据),然后由于您的日历已准备就绪,它将显示最新的数据


2-使用ngrx(或其他redux)进行中央数据存储,组件订阅存储,并在表单上发送操作

您有多个选项,这里有两个选项

1-创建一个服务,其中包含Observable和BehaviorSubject以及一个notify方法,然后让您的日历comp订阅该服务Observable,以您的形式调用service.notify并传递数据(或让服务再次获取数据),然后由于您的日历已准备就绪,它将显示最新的数据


2-使用ngrx(或其他redux)进行中央数据存储,组件订阅存储,并在表单上发送操作

如果第2页是一个对话框,我通常使用的一种方法是在第1页上使用对话框引用

例如,在第1页中,有一个函数可以将第2页作为对话框打开

addEventForm(date: Date){
     const dialogRef = this.matDialog.open(SomeFormComponent, { //given MatDialog var
      width: '50%',
      data: date
     });

     dialogRef.afterClosed().subscribe(result => {
      if(result == 'added') reloadPage();
     }
}
在第2页组件中有类似的内容

var eventAdded = false; //bind this to an event on html side

closeForm() { //if a the "close" button is pressed
 if(eventAdded) this.dialogRef.close('added');
 else this.dialogRef.close('cancelled');
}
表单将在第1页返回“added”,这将触发reloadPage()函数。
如果你的第2页是一个对话框,我通常使用的一种方法是在第1页上使用一个对话框引用

例如,在第1页中,有一个函数可以将第2页作为对话框打开

addEventForm(date: Date){
     const dialogRef = this.matDialog.open(SomeFormComponent, { //given MatDialog var
      width: '50%',
      data: date
     });

     dialogRef.afterClosed().subscribe(result => {
      if(result == 'added') reloadPage();
     }
}
在第2页组件中有类似的内容

var eventAdded = false; //bind this to an event on html side

closeForm() { //if a the "close" button is pressed
 if(eventAdded) this.dialogRef.close('added');
 else this.dialogRef.close('cancelled');
}
表单将在第1页返回“added”,这将触发reloadPage()函数。
查看有关材质对话框的更多信息

我最终创建了一个带有主题的服务。然后,该主题被传递给我的日历,然后当我调用subject时。下一步(事件)从表单页面中的服务触发所需的功能,以更新另一页上的日历。

我最终创建了一个带有主题的服务。然后,该主题被传递到我的日历,然后当我调用主题时。下一步(事件)从表单页面中的服务触发所需的功能,以更新另一页上的日历。

抱歉,已经很晚了&我喝醉了-但是如果你问“当我呈现组件时,我如何告诉组件执行某些操作”,我想你最好了解一下li