跳至内容
本页内容

已知局限性

不可否认,portal-vue 使用了一些技巧来实现其功能。因此,存在一些局限性,将在下面进行说明。

切换 disabled 时本地状态丢失

切换 Portal 组件的 disabled 状态时,门户槽中的组件会被销毁并重新创建,这意味着它们本地状态的任何更改都会丢失。

如果你需要持久化状态,可以使用某种形式的 状态管理

provide/inject

由于 Vue 从父组件解析提供项的方式,它将在 PortalTarget 的父级中查找提供的对象,因此 Portal 的父级提供的任何对象都将不可用在门户中的组件 - 但它将能够访问 PortalTarget 的父级提供的对象。

此外,当使用 multiple 门户将内容发送到一个 PortalTarget 时,不清楚应使用哪个 Portal 组件的注入项。

$parent

出于相同的原因,this.$parent 不会返回 Portal 的父级,而是会返回 PortalTarget,因此依赖于 $parent 的代码可能会失效。

vue-router

RouterView 在内部遍历 $parent 链以找出有多少(如果有)父级 RouterView 组件。因此,Portal 内部的 RouterView 将无法正确匹配其嵌套路由。请查看 #289 以获取讨论。

$refs

待办事项:验证有关 ref 的这部分是否仍然适用,或者是否需要更改。

在极少数情况下,你可能想要通过 ref 访问门户内容中的 DOM 元素/组件。这可行,但有时需要两次 $nextTick

javascript
this.$nextTick().then(
  this.$nextTick(() => {
    this.$refs.yourRef // element should now be in the DOM.
  })
)

原因是,根据具体情况,内容可能需要一个 tick 才能发送到虫洞(PortalPortalTarget 之间的中间人),还需要一个 tick 才能被 PortalTarget 拾取。