angular - NativeScript - 如何延迟路由直到侧抽屉关闭?
问题描述
我正在使用 NativeScript 6.4.1 和 Angular 8 编写应用程序。
我在我的项目中包含了 SideDrawer 功能。
https://docs.nativescript.org/ui/components/SideDrawer/getting-started 到目前为止它运行良好。
我注意到的一件事是,当我注销应用程序时,我通过 SideDrawer 注销,然后路由到应用程序的第一页。这种从侧边抽屉到主页的过渡不是很顺利。
我怎样才能等到侧抽屉关闭后再进行布线或使过渡更顺畅?
示例代码:
export class LogoutService {
constructor(private routerExtensions: RouterExtensions, private sideDrawerService: SideDrawerService) {}
public logout(): void {
appSettings.clear();
this.sideDrawerService.closeDrawer();
this.routerExtensions.navigate(['landing-page'], { clearHistory: true });
}
}
export class SideDrawerService {
constructor() {}
public showSideDrawer() {
const sideDrawer = app.getRootView() as RadSideDrawer;
sideDrawer.showDrawer();
}
public closeDrawer() {
const sideDrawer = app.getRootView() as RadSideDrawer;
sideDrawer.closeDrawer();
}
}
编辑:我可以在这里的文档中看到,当https://docs.nativescript.org/ns-ui-api-reference/classes/radsidedrawer#drawerclosedevent触发一些事件
我如何收听这些事件?
我尝试了这样的事情,但它不起作用:
public closeDrawerAsync() {
const sideDrawer = app.getRootView() as RadSideDrawer;
sideDrawer.drawerClosedEvent //this does not seem to exist
}
解决方案
使用drawerClosed
事件
export class SideDrawerService {
...
closeDrawer (callback?: () => void) {
const sideDrawer = app.getRootView() as RadSideDrawer;
if (callback) {
callback = zonedCallback(callback);
sideDrawer.once(RadSideDrawer.drawerClosedEvent, () => {
callback();
});
}
sideDrawer.closeDrawer();
}
...
}
现在你可以像这样使用它,
public logout(): void {
appSettings.clear();
this.sideDrawerService.closeDrawer(()=> {
this.routerExtensions.navigate(['landing-page'], { clearHistory: true });
});
}
推荐阅读
- jquery - 自动填充字段
- node.js - TypeScript 恢复原型链的最佳方法?(Node.js)
- python - Docusign - 无法访问 SDK 包中的“RecipientPreviewRequest”类
- java - Spring Boot 资源服务器无效的令牌
- highcharts - 来自mysql数据库的实时数据
- python - 破折号图例中的搜索框
- javascript - 在服务器上调用异步 javascript 函数
- spring - 缺少波前依赖性的伪影
- python - Python:删除希腊变音符号/口音
- javascript - 未捕获的类型错误:无法读取未定义 JSON 的属性