你现在这样做也可以。但是还有一种Vue专用的方法,通过ref
属性实现。
mounted () {
this.matchHeight()
},
matchHeight () {
let height = this.$refs.infoBox.clientHeight;
}
<div class="columns">
<div class="left-column" id="context">
<p>Some text</p>
</div>
<div class="right-column" id="info-box" ref="infoBox"></>
<img />
<ul>
some list
</ul>
</div>
</div>
在这种情况下,由于您只是获取值,因此使用原始的
getElementById
方法或vue特定的
ref
方法都无关紧要。但是,如果您正在设置元素的值,则最好使用
ref
方法,以便vue了解该值已更改,并且在需要更新DOM中的节点时,不会可能用原始值覆盖该值。
您可以在这里了解更多信息:
https://v2.vuejs.org/v2/api/#vm-refs
更新:
一些人留言称上述解决方案对他们无效。该解决方案提供了概念但没有完整的示例代码,因此我通过以下代码增强了我的答案,以演示相关概念。
var app = new Vue({
el: '#app',
data: function () {
return {
leftColStyles: { },
lines: ['one', 'two','three']
}
},
methods: {
matchHeight() {
var heightString = this.$refs.infoBox.clientHeight + 'px';
Vue.set(this.leftColStyles, 'height', heightString);
}
},
mounted() {
this.matchHeight();
}
});
.columns{width:300px}
.left-column {float:left; width:200px; border:solid 1px black}
.right-column {float:right; border:solid 1px blue; }
<div id="app">
<div class="columns">
<div class="left-column" id="context" v-bind:style="leftColStyles">
<p>Some text</p>
</div>
<div class="right-column" id="info-box" ref="infoBox">
<img />
<ul>
<li v-for="line in lines" v-text="line"></li>
</ul>
</div>
</div>
</div>
<script src="https://unpkg.com/vue@2.6.12/dist/vue.min.js"></script>
以下是浏览器中的结果截图:
注意:
我的答案假设您正在从cdn或本地加载vue.js并在浏览器中执行它。如果您是通过cli运行代码,而我的答案对您无效,请参见@mayank1513的答案。