【问题标题】:VueJS get Width of DivVueJS 获取 Div 的宽度
【发布时间】:2018-03-02 22:12:18
【问题描述】:

我有一个使用引导网格的 Vue 组件。在子组件中,我想获取控制器中某个 div 的当前宽度。

这里是子组件:

<template>
    <div id="bg-prev" ref="prev">
        <h1>{{x}}</h1>
    </div>
<template>

export default {
  props: ['section'],
  data() {
    return {
      x: 0,
      y: 0,
    }
  },
  mounted() {
    this.getWindowWidth();
  },
  methods: {
    getWindowWidth() {
      this.x = this.$refs.prev.clientWidth;
    }
  }
};
<style>
    #bg-prev {
      width: 100%;
    }
</style>

在此示例中,宽度始终为 0,即使在我检查元素时该元素具有明确的宽度。我在这里缺少什么,挂载的钩子是 vue 生命周期中最新的钩子,对吗?任何帮助表示赞赏;)

【问题讨论】:

  • 在我的 jsfiddle 中似乎工作正常,检查一下:jsfiddle.net/ikbelkirasan/d18bosh6/1
  • 这真的很奇怪,但在我的示例中,该组件是一个子组件。可能是因为子组件在父组件之前挂载,所以指向父组件的 100% 的宽度还不存在。
  • 您真的想创建可重现的演示。我可能知道为什么会发生,但是我需要自己创建演示来验证。所以你真的可以通过创建一个演示让它变得更简单。

标签: javascript vue.js vuejs2 vue-component vue-router


【解决方案1】:

除了一些错别字之外,代码运行良好。 (缺少结束模板标签)

不需要额外的钩子。唯一的例外是您在其 mount 方法中切换组件的呈现。然后你会使用类似的东西

const that = this
that.showDiv = true
that.$nextTick(function () {
  that.getWindowWidth()
})

您确定它的父级在挂载期间有宽度吗? 0px 的 100% 仍然是 0px。

【讨论】:

  • 父元素是带有 col-md-9 的引导 div。正如我所说,当我检查元素及其父元素时,它具有宽度和高度
  • 超级老派和 ES6 的美丽(开玩笑)组合。
  • 只要在代码中编写“函数”,就会创建一个新的作用域。因此,您无法使用 this 访问没有该范围的方法。如果使用箭头函数 () => {},则 this 与外部 this 具有相同的范围。有时您确实需要在一个功能中使用 2 个作用域,例如。 G。当库将事件绑定到“this”并且您想要访问绑定到外部“this”的方法时。
猜你喜欢
  • 2021-07-14
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
相关资源
最近更新 更多