首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果路由元数据键设置为true,则Vue呈现组件在特定路由中作为模态呈现。

如果路由元数据键设置为true,则Vue呈现组件在特定路由中作为模态呈现。
EN

Stack Overflow用户
提问于 2017-07-13 08:56:17
回答 1查看 1.3K关注 0票数 4

我正在使用vue-路由器,并试图创建如下功能:

我希望能够在路由器路由中指定一个组件是否应该以模式呈现。如果它是在模态渲染,保持每一个组件下面(在模态掩码下)的原样。我已经创建了一个模态包装组件,它具有基本的模态结构,并且在其模态体中包含slot,所以我想要呈现的组件应该放在slot中。但如何实现这一目标。Vue-Router对这种功能有选择吗?

路由器路由:

代码语言:javascript
复制
{
  path: '/customers/:clientId',
  component: customerView
  meta: {
    auth: true,
  },
},
{
  path: '/customers/:clientId/addAddress',
  component: dataViewAdd
  meta: {
    openInModal: true,
    auth: true,
  },
},

因为如果组件应该在模式内呈现,同时覆盖上一个路由器视图,我想我需要2个路由器视图。

代码语言:javascript
复制
<router-view class="normal-view"></router-view>
<router-view class="modal-view" name="modal-view"></router-view>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-13 09:32:08

如果每个模态路由中显示的组件没有在非模态上下文中使用,那么您只需修改模态路由组件的模板(dataViewAdd),以便模态组件是模板的根。但是,您提到了在不同的情况下重用这些组件(因此,一个路由可能在一个模式中使用dataViewAdd,另一个路由可能使用dataViewAdd,而不是在一个模式中)。

您可以为每个组件创建包装器模式版本,但这会变得很混乱;看起来,您只是希望能够指定openInModal: true,并让它对任何组件都有效。

您还提到了模式在DOM中的位置并不重要(否则我建议使用类似portal-vue的方法来帮助实现这一点)。

首先,您需要更改路由器配置,以便模态路由是要在其下面保持可见的组件的子节点。确保customerView内部有一个<router-view>

创建一个助手函数,该函数返回组件的模态包装版本,并将其用作路由组件。这不使用openInModal元属性,但它以类似的方式工作。

以下代码未经测试。

代码语言:javascript
复制
import Modal from './modal.vue';

function wrapInsideModal(childComponent) {
  return {
    functional: true,
    render(h) {
      return h(Modal, [h(childComponent)]);
    },
  };
}

// Routes
{
  path: '/customers/:clientId',
  component: customerView,
  meta: {
    auth: true,
  },
  children: [
    {
      path: 'addAddress',
      component: wrapInsideModal(dataViewAdd),
    },
  ],
},
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45075898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档