在VUE js中获取数组中数据的索引

Posted

技术标签:

【中文标题】在VUE js中获取数组中数据的索引【英文标题】:Getting index of a data in an array in VUE js 【发布时间】:2018-09-16 17:53:49 【问题描述】:

我想在调用特定方法时更改任务的状态。但问题是我无法获取数组特定项的索引来更改其状态。 这是我的 html

<div class="main" id="my-vue-app">
    <ul>
        <li v-for="task in completeTask">
             task.description  <button @click="markIncomplete">Mark as Incomplete</button>
        </li>

    </ul>
    <ul>
        <li v-for="task in incompleteTask">
             task.description  <button @click="markComplete">Mark as Complete</button>

        </li>
    </ul>
</div>

这是我的 Vue:

<script>
    new Vue(
        
            el: '#my-vue-app',
            data:
            
                tasks: [
                description:'go to market', status: true,
                description:'buy book', status: true, 
                description:'eat biriani', status: true, 
                description:'walk half kilo', status: false, 
                description:'eat icecream', status: false, 
                description:'return to home', status: false
                ]
            ,
            computed: 
            
                incompleteTask()
                
                    return this.tasks.filter(task => ! task.status);
                ,
                completeTask()
                
                    return this.tasks.filter(task => task.status);
                
            ,
            methods: 
            
                markComplete()
                
                    return this.task.status = true;

                ,
                markIncomplete()
                
                    return this.task.status = false;
                
            
        
    )
</script>

我需要使用markComplete()markIncomplete() 但问题是我找不到获取当前元素索引以更改其状态的方法。

【问题讨论】:

【参考方案1】:

您可以通过declaring a second argument at the v-for获取索引:

<li v-for="(task, index) in incompleteTask">
     task.description  <button @click="markComplete(index)">Mark as Complete</button>
</li>
    methods: 
    
        markComplete(index)
        
            return this.tasks[index].status = true;

        ,

但是,一种可能更简单的替代方法是简单地task 作为参数传递

<li v-for="task in incompleteTask">
     task.description  <button @click="markComplete(task)">Mark as Complete</button>
</li>
    methods: 
    
        markComplete(task)
        
            return task.status = true;

        ,

【讨论】:

对于第一个代码,我尝试了这个方法 markIncomplete() return this.tasks[index].status = false;错误:索引未定义,我该如何解决这个问题 看,方法用法@click="markComplete(index)"和方法签名也应该改变:methods: markComplete(index) 那么,这个是不是,Vue自动将第二个参数作为“index”?【参考方案2】:

RTFM:

您可以使用 v-repeat 指令重复模板元素 基于 ViewModel 上的对象数组。对于每一个对象 数组,该指令将使用它创建一个子 Vue 实例 对象作为它的 $data 对象。这些子实例继承所有数据 在父级上,因此在您可以访问的重复元素中 重复实例和父实例的属性。在 此外,您还可以访问 $index 属性,这将是 渲染实例对应的数组索引。

var demo = new Vue(
  el: '#demo',
  data: 
    parentMsg: 'Hello',
    items: [
       childMsg: 'Foo' ,
       childMsg: 'Bar' 
    ]
  
)
<script src="https://unpkg.com/vue@0.12.16/dist/vue.min.js"></script>

<ul id="demo">
  <li v-repeat="items" class="item-$index">
    $index - parentMsg childMsg
  </li>
</ul>

来源:

https://012.vuejs.org/guide/list.html

注意:指令 v-repeat 在旧版本的 Vue.js 中可用 :-)

【讨论】:

以上是关于在VUE js中获取数组中数据的索引的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue.js 中获取 v-for 索引?

vue中楼层滚动实现原理解析

如何在Vue中将格式化的输入文本存储到带有索引的数组中?

访问 vue.js 模板中的 php 数组

如何将从 API 获取的数组分配给 Vue.js 中的数据属性?

在 laravel 中使用 vue.js 获取动态字段数据