1

我想以每次执行函数时创建一个新的 li 元素的方式使用 v-for。像这样的东西

<ul>
    <li v-for:"someFunction()">Function started</li>
</ul>

new Vue({
    ...
    methods: {
        someFunction: function() {
            //do some stuff
        }
    }
});

有没有办法做到这一点?

4

2 回答 2

2

这不是如何v-for工作的。

您应该创建一个数组数据属性并在每次调用该函数时推送给它。v-for然后在指令中使用该属性:

new Vue({
  el: '#app',
  data() {
    return { items: [] };
  },
  methods: {
    someFunction: function() {
      this.items.push({});
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.min.js"></script>
<div id="app">
  <ul>
    <li v-for="item in items">Function started</li>
  </ul>
  
  <button @click="someFunction">Call Function</button>
</div>

    


或者,如果您只需要跟踪方法被触发的次数,您可以传递v-for一个数字:

new Vue({
  el: '#app',
  data() {
    return { count: 0 };
  },
  methods: {
    someFunction: function() {
      this.count++;
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.min.js"></script>
<div id="app">
  <ul>
    <li v-for="n in count">Function started</li>
  </ul>
  
  <button @click="someFunction">Call Function</button>
</div>

于 2017-10-04T14:41:15.863 回答
1

只需使用一个变量:

<ul>
  <li v-for="item in items">
    {{ item.message }}
  </li>
</ul>

new Vue({
    ...
    data () {
      return {
         items: {message: 'Test 1', message: 'Test 2'}
      }
    },
    methods: {
        someFunction: function() {
            this.items.push( {message: 'Test 3'} )
        }
    }
});
于 2017-10-04T14:42:21.123 回答