【问题标题】:Vue.js dynamic data collection for v-forv-for 的 Vue.js 动态数据收集
【发布时间】:2018-10-11 21:52:30
【问题描述】:

我对 Vue.js 还是很陌生,试图让以下工作:

我在视图实例的根数据中有几个对象数组 - 假设它们的名称是 to do list, shopping list, meetings list

我也有三个同名的按钮。

如果我硬编码<div v-for='items in todolist'>,当然可以,但是:

当我们单击三个按钮之一时,只有其中一个 divs 并动态更改我正在循环的数组的最佳方法是什么?

我没有使用 ES6,只包含 CDN。

我正在尝试做的基本示例(不工作)可以在这里找到: https://jsfiddle.net/eywraw8t/415174/

有一个链接列表应该改变下面列表的 v-for 数据收集。

【问题讨论】:

    标签: vuejs2


    【解决方案1】:

    使用计算属性根据其他属性返回正确的数组。

    例如

    data: {
      lists: {
        todos: [...],
        shopping: [...],
        meetings: [...],
      },
      currentList: 'todos'
    },
    computed: {
      items () {
        return this.lists[this.currentList]
      }
    }
    

    在你的模板中,使用类似

    <p>
      <label>Todos <input type="radio" v-model="currentList" value="todos"></label>
      <label>Shopping <input type="radio" v-model="currentList" value="shopping"></label>
      <label>Meetings <input type="radio" v-model="currentList" value="meetings"></label>
    </p>
    <div v-for="item in items">
      <!-- etc -->
    </div>
    

    JSFiddle Demo


    如果你想通过方法设置currentList属性,那完全可以,例如

    <a v-for="list in ['todos', 'shopping', 'meetings']" @click="setCurrentList(list)">
      {{ list }}
    </a>
    

    在你的方法中......

    methods: {
      setCurrentList(list) {
        this.currentList = list
      }
    }
    

    甚至内联

    @click="currentList = list"
    

    【讨论】:

    • 啊,我正在尝试类似的东西,但没有this[this.currentList] - 我没有想到。有没有办法用方法来设置它?因为所有这些 A 标签(在你的例子中是单选按钮)都是动态生成的?
    • @MaximilianBerbechelov 当然,我会添加一个示例
    • 这几乎就是我想要做的。当我直接传递它时 - setCurrentList(list) 它可以工作,但是当我将它作为来自某个地方的变量传递时(有点像你的例子),它会作为字符串传递
    • @MaximilianBerbechelov 请更新您的问题 (by editing it),因为您的评论不清楚
    • 对不起。包括一个简单的 jsfiddle 和我正在尝试做的事情的骨架。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    相关资源
    最近更新 更多