如何在VueJS中获取渲染列表项的innerText

时间:2017-05-26 20:30:49

标签: javascript vuejs2

我想在呈现的列表中获取项目的innerText,但使用this.$refs访问它似乎不起作用。我也试过使用v-modal,这似乎也不起作用。

这是我的代码:

<div id="simple" v-cloak>
  <h1>Clicked word value!</h1>
  <ul>
    <li v-for="word in wordsList" @click="cw_value" ref="refWord">
      {{ word }}
    </li>
    <h4> {{ clickedWord }} </h4>
  </ul>
</div>
var app = new Vue({
  el: '#simple',
  data: {
    clickedWord: '',
    wordsList: ['word 1', 'word 2', 'word 3']
  },
  methods: {
    cw_value: function() {
      this.clickedWord = this.$refs.refWord.innerText
      // "I don't know how to get inner text from a clicked value"
    }
  }
})

1 个答案:

答案 0 :(得分:4)

由于您在与ref="refWord"相同的元素上使用了v-for,因此this.$refs.refWord是一个包含由v-for呈现的每个DOM元素的数组。

您应该引用每个单词的索引,然后将其传递给单击处理程序:

<li v-for="word, index in wordsList" @click="cw_value(index)" ref="refWord">

然后,在您的cw_value方法中,使用索引值来访问数组中的正确元素:

cw_value: function(index) {
  this.clickedWord = this.$refs.refWord[index].innerText;
}

Here's a working fiddle.

或者,在点击处理程序中单击设置点击的单词会更简单:

<li v-for="word in wordsList" @click="clickedWord = word">

Here's a working fiddle for that too.