首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有位置的Vue组件:绝对

具有位置的Vue组件:绝对
EN

Stack Overflow用户
提问于 2019-07-18 14:03:48
回答 1查看 5.8K关注 0票数 1

有一个Vue-component。这是一个包含一些内容的div。根据事件,必须将该元素放置在给定的坐标(相对于文档)。

我为它设定了样式:

代码语言:javascript
复制
return {
    position: "absolute",
    top: `${x}px`,
    left: `${y}px`,
};

但是,如果该元素的父元素之一具有position: relative,则位置计算相对于父元素,而不是文档。

我的解决方案:将元素移动到文档根。

代码语言:javascript
复制
mounted() {
    document.body.appendChild(this.$refs.container);
},

效果很好。但我有问题:

  1. 只能用CSS解决这个问题吗?
  2. 当我移动在Vue-template中呈现的元素时,会发生什么问题?
  3. 有没有更好的解决办法?
EN

回答 1

Stack Overflow用户

发布于 2019-07-18 14:09:11

您所拥有的是门户的一个很好的用例。它允许组件在某个位置存在,但模板在其他地方呈现。看看门户-vue

代码语言:javascript
复制
Vue.config.productionTip = false;
Vue.use(PortalVue);

Vue.component('MyComponent', {
  template: `
    <div>
      <h1>First</h1>
      <portal to="destination">
        <h1>Second</h1>
      </portal>

    </div>
  `,
});

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/portal-vue@2.1.5/dist/portal-vue.umd.min.js"></script>

<div id="app">
  <div class="portal-destination">
    <portal-target name="destination"></portal-target>
  </div>
  <div><my-component></my-component></div>
</div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57096400

复制
相关文章

相似问题

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