【问题标题】:Access data inside mounted VueJS访问挂载的 VueJS 中的数据
【发布时间】:2018-06-16 04:47:35
【问题描述】:

我正在尝试使用 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>

CSS:

#title-preview {
  display: inline-block;
}

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';
    }
  }
})

谁能帮我改正?

【问题讨论】:

  • 原因是整个mounted()都是在页面渲染之前发生的。你应该以某种方式延迟它。不过,我仍在努力寻找一个好的答案。

标签: javascript vue.js


【解决方案1】:

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

  1. ref 属性添加到title-preview,这样您就不需要使用document.getElementById(这没什么问题,但我更愿意让Vue 为我做这些)

&lt;div id="title-preview" ref="titleRef"&gt;{{title}}&lt;/div&gt;

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

这应该会为您提供所需的内容。

【讨论】:

  • 嗨帕特里克,如果我将静态数据添加到标题,它会起作用。但是,当我尝试通过使用 axios 获取数据来设置动态标题时(在mounted 中,我添加了这些代码axios.get('request url')...this.title = response.data),消息返回0。我知道我的“axios”代码是正确的,因为我可以看到价值在输入。谢谢
  • 不得不在没有看到您的axios 回调的情况下进行判断,但我怀疑您用来设置this.titlethis 不是Vue 实例。尝试在调用 axios 之前将实例 (var vm = this;) 保存在变量中,然后在 axios 回调中,使用 vm.title = response.data
  • @PatrickSteele 我也有同样的问题。保存实例 (var vm = this; ) 对我有用。你能解释一下这种行为吗?
猜你喜欢
  • 2021-01-16
  • 2017-06-22
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 2019-03-05
  • 2017-01-24
  • 2018-03-25
  • 1970-01-01
相关资源
最近更新 更多