原生脚本 |在 android 后退按钮导航后调用 ngOnInit
nativescript | call ngOnInit after android back button Navigation
我在处理后退按钮时遇到问题,当用户点击后退按钮时,不会触发 ngOnInit 并且组件无法正常工作。
从我所看到的,我了解到当录音时它只会让 ngOnDestroy 着火而不是 ngOnInit
this is the lifecycle
open App --> ngOnInit() called
click on some anther component --> ngOnInit() of the new component called
tap back --> ngOnDestroy
有人遇到同样的问题吗,你是怎么处理的?
谢谢
为什么你认为 ngOnInit
应该 运行 在后面?它没有
解决方案是使用路由器事件:
例如:检测 back
从 "/beatles/john/songs/strawberryfields"
到 "/doors/jim/girlfriend/pam"
的解决方案
Doors page --------> Beatles page.....(back tapped)----------->Doors
是:
将此方法添加到共享服务中:
public onNavigatePreviousToCurrent(pre: string, current: string ): Observable<any>
{
return this.router.events.pipe(filter(e => e instanceof NavigationEnd), pairwise(), filter((f: [any, any]) =>
{
return f[0].url.toLowerCase()
.indexOf(pre.toLowerCase()) > -1 &&
f[1].url.toLowerCase()
.indexOf(current.toLowerCase()) > -1;
}) );
}
在 Doors 页面中调用它:
ngOnInit()
{
let f = this._routingService.onNavigatePreviousToCurrent("john", "pam") //or doors or jim
.subscribe((res) =>
{
//do what you want here !!!
}, (error) =>
{
});
//don't forget to unsubscribe `f`
}
请注意,您可以使用 /beatles/john/songs/strawberryfields
中的任何标记(beatles
、john
、songs
、strawberryfields
、atles
)- ---> 也在 Doors 中。 (子字符串)
基本上,此方法会检测您来自哪里以及 back
之后的目的地是什么。
顺便说一句,你可能想说:"well , I don't know where I am , I only want a situation where a user tapped "返回。
答案:
this._routingService.onNavigatePreviousToCurrent("/", "pam") ;
// "/" will always be present , so basically this ^ detects back from anywhere to Doors page
经过一番搜索我决定使用这个解决方案
在我需要 ngOnInit 的组件中 运行 即使导航来自后退按钮或功能我添加了这个
constructor(private location : PlatformLocation) {}
ngOnInit() {
this.location.onPopState(() => {
this.initComponent();
});
}
我在处理后退按钮时遇到问题,当用户点击后退按钮时,不会触发 ngOnInit 并且组件无法正常工作。 从我所看到的,我了解到当录音时它只会让 ngOnDestroy 着火而不是 ngOnInit
this is the lifecycle
open App --> ngOnInit() called
click on some anther component --> ngOnInit() of the new component called
tap back --> ngOnDestroy
有人遇到同样的问题吗,你是怎么处理的? 谢谢
为什么你认为 ngOnInit
应该 运行 在后面?它没有
解决方案是使用路由器事件:
例如:检测 back
从 "/beatles/john/songs/strawberryfields"
到 "/doors/jim/girlfriend/pam"
Doors page --------> Beatles page.....(back tapped)----------->Doors
是:
将此方法添加到共享服务中:
public onNavigatePreviousToCurrent(pre: string, current: string ): Observable<any>
{
return this.router.events.pipe(filter(e => e instanceof NavigationEnd), pairwise(), filter((f: [any, any]) =>
{
return f[0].url.toLowerCase()
.indexOf(pre.toLowerCase()) > -1 &&
f[1].url.toLowerCase()
.indexOf(current.toLowerCase()) > -1;
}) );
}
在 Doors 页面中调用它:
ngOnInit()
{
let f = this._routingService.onNavigatePreviousToCurrent("john", "pam") //or doors or jim
.subscribe((res) =>
{
//do what you want here !!!
}, (error) =>
{
});
//don't forget to unsubscribe `f`
}
请注意,您可以使用 /beatles/john/songs/strawberryfields
中的任何标记(beatles
、john
、songs
、strawberryfields
、atles
)- ---> 也在 Doors 中。 (子字符串)
基本上,此方法会检测您来自哪里以及 back
之后的目的地是什么。
顺便说一句,你可能想说:"well , I don't know where I am , I only want a situation where a user tapped "返回。
答案:
this._routingService.onNavigatePreviousToCurrent("/", "pam") ;
// "/" will always be present , so basically this ^ detects back from anywhere to Doors page
经过一番搜索我决定使用这个解决方案
在我需要 ngOnInit 的组件中 运行 即使导航来自后退按钮或功能我添加了这个
constructor(private location : PlatformLocation) {}
ngOnInit() {
this.location.onPopState(() => {
this.initComponent();
});
}