访问挂载的 VueJS 中的数据

Tiế*_*ang 5 javascript vue.js

我正在尝试使用 Vuejs 创建简单的应用程序,该应用程序将检查标题标签 (px) 的长度。

在安装内部,我设置了标题的默认值并运行检查默认标题标签的长度,但它返回 0。当我更改输入值时,它工作正常。

这是我的代码。链接:https : //codepen.io/mrtienhp97/pen/LeOzGa

HTML:

<div id="app">
   <input v-model="title" @input="titleCheck()">

  <div id="title-preview">{{title}}</div>

  <div class="message">{{message}}</div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#title-preview {
  display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)

JS:

new Vue({
  el: '#app',
  data: {
    title: '',
    message: ''
  },
  mounted: function() {
    this.$nextTick(function () {
      this.title = "Default Title";
      var title_width = document.getElementById("title-preview").offsetWidth;
      this.message = title_width + 'px';
    });
  },
  methods: {
    titleCheck: function() {
      var title_width = document.getElementById("title-preview").offsetWidth;
      this.message = title_width + 'px';
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

谁能帮我改正?

Pat*_*ele 5

mounted如果您使用 来$nextTick确保视图在获取宽度之前已更新,那么您的想法是正确的,但您每次都希望通过将其作为 的一部分来做到这一点titleCheck。您可以更改以下内容以使其正常工作:

  1. 添加一个ref属性,title-preview这样你就不需要使用document.getElementById(这没什么问题,但我更喜欢让它Vue为我做)

<div id="title-preview" ref="titleRef">{{title}}</div>

  1. 更改titleCheck为 use$nextTick以及$refsto get title-preview
titleCheck: function() {
  this.$nextTick(function () {
    var title_width = this.$refs.titleRef.offsetWidth;
    this.message = title_width + 'px';
  });
}
Run Code Online (Sandbox Code Playgroud)
  1. 您可以简化mounted事件以设置标题,然后调用您的titleCheck方法:
mounted: function() {
  this.title = "Default Title";
  this.titleCheck();
}
Run Code Online (Sandbox Code Playgroud)

这应该可以满足您的需求。