在 nativescript 中的模态中打开模态

Posted

技术标签:

【中文标题】在 nativescript 中的模态中打开模态【英文标题】:Open modal within modal in nativescript 【发布时间】:2020-07-01 04:06:59 【问题描述】:

当我尝试打开一个模态时,我已经在另一个模态中。我收到一条错误消息:

ViewHierarchy: 父级已经在展示视图控制器,在显示另一个之前关闭当前的模态页面!

这是playground sample,我怎样才能在另一个模式中拥有一个模式?

复制

点击按钮(应该会弹出一个模式) 点击按钮(什么都不会发生,你会得到一个错误)

预期行为

您应该会看到一个新的弹出窗口打开。

我的环境

$ tns info
✔ Getting NativeScript components versions information...
✔ Component nativescript has 6.5.0 version and is up to date.
✔ Component tns-core-modules has 6.5.0 version and is up to date.
✔ Component tns-android has 6.5.0 version and is up to date.
✔ Component tns-ios has 6.5.0 version and is up to date.

【问题讨论】:

你用什么设备测试它?没有发现运行 iOS 13 的 iPad 有任何问题。 @manoj ipad, ios 13.3 这是一个模拟器。我下载了操场,然后运行 ​​tns debug ios。我没有真正的设备。 @Manoj 您是否成功重现了该问题?我添加了我的环境版本。 @Manoj 您是仅尝试使用 Playground 还是尝试构建到设备中?我还在回购中提出了一个问题,但他们似乎并不认为这是一个问题,即使它突然出现。 github.com/NativeScript/NativeScript/issues/8447 【参考方案1】:

nativescript-vue 文档并不清楚如何使用嵌套模式,因为它在 @yukashima-huksay 的帖子之后得到了修复。但是 github 上有 an example 演示了它的用法。

可以使用target 选项打开辅助模式,该选项可以针对当前视图(使用this)或元素(即this.$refs[<some element>])。

// this
this.$showModal(SecondaryModal,  target: this );

// $refs
this.$showModal(SecondaryModal,  target: this.$refs['myView'] );

【讨论】:

你也可以通过测试this.$root.nativeView.modal is not undefined来查看一个modal是否已经在根对象上打开。【参考方案2】:

这似乎是当前版本的NativeScript-Vue 的问题(截至今天,v2.5.0)。每次您尝试创建模态时,它都会尝试使用相同的父控制器,使用第一个模态作为第二个模态的父级将解决该问题。但是没有解决方法,要么您必须自己完全处理模式,要么对 nativescript-vue 包的源代码进行修补。否则,您可以使用 v2.3.0 来解决这个特定问题(但我不确定您在 v2.5.0 上还有哪些其他好处,您可能需要查看更改日志)。

我建议您使用 Playground 示例在 Github 存储库上提出问题并链接到此 SO 帖子,希望他们在下一个版本中修复它。

【讨论】:

以上是关于在 nativescript 中的模态中打开模态的主要内容,如果未能解决你的问题,请参考以下文章

无法在 NativeScript Vue 模态中访问道具

如何在 nativescript 中显示模态视图时将窗口背景变为黑色

为啥我的 Nativescript-vue 应用程序在呈现模态之前使用硬件后退按钮时崩溃?

AbsoluteLayout 框架中的 NativeScript Vue 模式

Nativescript-Vue 超时后关闭模式

在 nativescript-vue 视图模式组件中显示数组数据