已知局限性
不可否认,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 拾取。