简体   繁体   English

Vuejs中的单独数组推送

[英]Separate Array push in Vuejs

I am trying to get value from object and push into array using Vue.我正在尝试从对象中获取价值并使用 Vue 推入数组。 I wanted to separate every value when into different array every time I click my item.每次单击我的项目时,我都想将每个值分隔到不同的数组中。 Every time I click todo should be push on different array, how I can separate to push into different array每次单击 todo 都应该推送不同的数组,我如何分开推送到不同的数组

 new Vue({ el: "#app", data: { todos: [ { text: "Learn JavaScript"}, { text: "Learn Vue"}, { text: "Play around in JSFiddle"}, { text: "Build something awesome"} ], mytodo:[] }, methods: { myClickTodo: function(e){ this.mytodo.push(e.target.innerText) console.log(e.target.innerText) } } })
 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <div id="app"> <h2>My list One:</h2> <ul> <li v-for="todo in todos" @click="myClickTodo"> {{ todo.text + " from todo one" }} </li> </ul> <p>todo 1 </p> <p>{{mytodo}}</p> <hr> <h2>My list Two:</h2> <ul> <li v-for="todo in todos" @click="myClickTodo"> {{ todo.text + " from todo two" }} </li> </ul> <p>todo 2</p> <p>{{mytodo}}</p> </div>

Quick fix快速解决

One solution is to change mytodos into an array of 2 arrays (one for each TODO list):一种解决方案是将mytodos更改为包含 2 个数组的数组(每个 TODO 列表一个):

data() {
  return {
    mytodo: [[], []]
  };
}

Then, update your click -handler to pass the specific array element of mytodos along with the todo item to be added:然后,更新您的click处理程序以传递mytodos的特定数组元素以及要添加的todo项:

<!-- My list One -->
<li v-for="todo in todos" @click="myClickTodo(mytodos[0], todo)">

<!-- My list Two -->
<li v-for="todo in todos" @click="myClickTodo(mytodos[1], todo)">

And update myClickTodo to handle these new arguments:并更新myClickTodo以处理这些新参数:

methods: {
  myClickTodo(mytodo, todo) {
    mytodo.push(todo.text);
  }
}

 new Vue({ el: '#app', data: () => ({ todos: [ { text: "Learn JavaScript"}, { text: "Learn Vue"}, { text: "Play around in JSFiddle"}, { text: "Build something awesome"} ], mytodo: [[], []] }), methods: { myClickTodo(mytodo, todo) { mytodo.push(todo.text); console.log(todo.text); } } })
 <script src="https://unpkg.com/vue@2.5.17"></script> <div id="app"> <h2>My list One:</h2> <ul> <li v-for="todo in todos" @click="myClickTodo(mytodo[0], todo)"> {{ todo.text + " from todo one" }} </li> </ul> <p>todo 1 </p> <p>{{mytodo[0]}}</p> <hr> <h2>My list Two:</h2> <ul> <li v-for="todo in todos" @click="myClickTodo(mytodo[1], todo)"> {{ todo.text + " from todo two" }} </li> </ul> <p>todo 2</p> <p>{{mytodo[1]}}</p> </div>

Components成分

A cleaner solution is to encapsulate the TODO list into a reusable component (eg, named "my-list"):一个更简洁的解决方案是将 TODO 列表封装到一个可重用的组件中(例如,命名为“my-list”):

Vue.component('my-list', {
  data: () => ({
    title: '',
    mytodo: [],
  }),
  props: {
    todos: {
      type: Array,
      default: () => []
    }
  },
  template: `<div>
    <h2>{{title}}</h2>
      <ul>
        <li v-for="todo in todos" @click="myClickTodo(mytodo, todo)">
          {{ todo.text + " from todo one" }}
        </li>
      </ul>

      <p>{{mytodo}}</p>
    </div>`,
  methods: {
    myClickTodo(mytodo, todo) {
      mytodo.push(todo.text);
      console.log(todo.text);
    }
  }
});

...which would allow you to simplify your app template to this: ...这将允许您将应用程序模板简化为:

<my-list title="My List One:" :todos="todos"></my-list>
<my-list title="My List Two:" :todos="todos"></my-list>

 Vue.component('my-list', { data: () => ({ mytodo: [], }), props: { title: '', todos: { type: Array, default: () => [] } }, template: `<div> <h2>{{title}}</h2> <ul> <li v-for="todo in todos" @click="myClickTodo(mytodo, todo)"> {{ todo.text + " from todo one" }} </li> </ul> <p>{{mytodo}}</p> </div>`, methods: { myClickTodo(mytodo, todo) { mytodo.push(todo.text); console.log(todo.text); } } }); new Vue({ el: '#app', data: () => ({ todos: [ { text: "Learn JavaScript"}, { text: "Learn Vue"}, { text: "Play around in JSFiddle"}, { text: "Build something awesome"} ], }), })
 <script src="https://unpkg.com/vue@2.5.17"></script> <div id="app"> <my-list title="My List One:" :todos="todos"></my-list> <my-list title="My List Two:" :todos="todos"></my-list> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM