已知局限性
不可否认,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 才能发送到虫洞(Portal
和 PortalTarget
之间的中间人),还需要一个 tick 才能被 PortalTarget
拾取。