几次导航后如何关闭原生脚本模式?

Posted

技术标签:

【中文标题】几次导航后如何关闭原生脚本模式?【英文标题】:How to close a nativescript modal after a few navigations? 【发布时间】:2020-02-08 15:09:00 【问题描述】:

打开了一个模式,它有多个页面。对于导航,我使用的是框架导航。每个页面上都有一个关闭按钮,点击它会关闭模式。

我现在正在做的是将this.$modal 作为属性传递给每个页面,这会创建一长串属性传递,并且在每个页面上我只执行this.modal.close() 其中this.modal 是引用组件的属性到第一页的this.$modal

我想知道是否有更好的方法,例如访问最顶部的打开模式并关闭它。

我正在使用 nativescript-vue 和内置的 nativescript modals

请注意,我的应用程序的其他部分有多个模式。只有这个有导航。

【问题讨论】:

this.$modal 是否已经全局注册了对象? @Dev.DY 没有。在每个模态的主要组件中。 this.$modal 存在。 您提出了一个通过注册 $modal 全局来使用的解决方案。请检查您的答案。 【参考方案1】:

一个小的改进可能是将模态保存到 Vuex 存储中,随时访问它而不是链接道具。

【讨论】:

我认为这是一种不好的气味,因为模态引用并不是真正的“状态”或数据。我认为它不属于 vuex。 不一定是数据,更多的是全局参考,如果你已经在使用 Vuex 可能是更好的选择。或者你可以使用 EventBus。 @Manoj 我听说 vuex 是全局状态的地方,而不是全局引用。 我的观点是,在此处存储引用并稍后清除它并没有什么坏处,而不是通过长的 props 链传递它。也可以选择 EventBus 来触发全局事件并处理关闭操作。【参考方案2】:
    通过插件分离模态组件。
const modalDialog = 
  install (Vue, options = ) 
     // ...
  


Vue.use(modalDialog)
    为插件指定 Vue 原型。
const modalDialog = 
  install (Vue, options = ) 
     Vue.prototype.$modal = 
       show () 
         // ...
       ,
       hide () 
         // ..
       
     
  


Vue.use(modalDialog)
    this.$modal 可从所有组件访问。
this.$modal.show() // or hide()

【讨论】:

尽管这个答案很好,但它并不完全适合 nativescript 模态的上下文。对不起,我想我应该在我的问题中更清楚地说明问题。我现在会的。

以上是关于几次导航后如何关闭原生脚本模式?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:模式关闭后导航栏中的按钮不会触发

导航回我的屏幕时如何关闭模式?

如何导航到另一个页面关闭模式?

SwiftUI 模式表在关闭后重新打开

几次点击后引导模式停止

使用导航关闭模态视图控制器