Javascript Vue JS中单个元素的切换类

Javascript Vue JS中单个元素的切换类,javascript,vue.js,Javascript,Vue.js,我有一个通过jsonplaceholder生成的待办事项列表,单击按钮会用虚拟内容填充div 我试图实现的是,当我点击一个单独的div(任务)时,它应该被删除/隐藏 到目前为止, <button id="btn" v-on:click= 'getTodo'>Show Todo</button> <div id="jsonData" v-for = 'todo in todos' > <ul v-bind:class = '{act

我有一个通过jsonplaceholder生成的待办事项列表,单击按钮会用虚拟内容填充div

我试图实现的是,当我点击一个单独的div(任务)时,它应该被删除/隐藏

到目前为止,

<button id="btn" v-on:click= 'getTodo'>Show Todo</button>
    <div id="jsonData" v-for = 'todo in todos' >
        <ul v-bind:class = '{active: isActive}' v-on:click = 'removeTask'>
            <li>{{todo.title}} </li>
            <li id="status"> Task Status : {{todo.completed}} </li>
        </ul>
    </div>
“removeTask”事件处理程序为所有生成的div(任务)而不是单击的div切换类


如何在单击的div上添加/删除类?

isActive
针对整个实例,而不是每个单独的todo

您需要做的是通过映射响应数据或仅使用响应数据的
completed
属性来填充todo列表

{
    "userId": 10,
    "id": 193,
    "title": "rerum debitis voluptatem qui eveniet tempora distinctio a",
    "completed": true
}
响应的每个todo项都有
已完成的
属性,因此您可以使用该属性

这就是你要做的:

var vm=new Vue({
el:“#应用程序”,
数据(){
返回{
待办事项:[]
}
},
方法:{
getTodo:function(){
axios.get()https://jsonplaceholder.typicode.com/todos')
。然后((响应)=>{
this.todos=response.data;
})
},
切换完成:功能(todo){
todo.completed=!todo.completed;
}
}
})

显示待办事项
    {{todo.title} 任务状态:{{todo.completed?'completed':'Active'}

isActive
是针对整个实例的,而不是针对每个单独的todo

您需要做的是通过映射响应数据或仅使用响应数据的
completed
属性来填充todo列表

{
    "userId": 10,
    "id": 193,
    "title": "rerum debitis voluptatem qui eveniet tempora distinctio a",
    "completed": true
}
响应的每个todo项都有
已完成的
属性,因此您可以使用该属性

这就是你要做的:

var vm=new Vue({
el:“#应用程序”,
数据(){
返回{
待办事项:[]
}
},
方法:{
getTodo:function(){
axios.get()https://jsonplaceholder.typicode.com/todos')
。然后((响应)=>{
this.todos=response.data;
})
},
切换完成:功能(todo){
todo.completed=!todo.completed;
}
}
})

显示待办事项
    {{todo.title} 任务状态:{{todo.completed?'completed':'Active'}

使用
axios
API,我得到TODO,并实际循环到各个TODO上,并对所有TODO应用
isActive
道具。 将todo'
id
传递给方法时,现在可以通过
toggleTodo
切换这些道具。:-)

请注意,我已经在
ul
上应用了
v-if=“todo.isActive”
,如果您想应用一些样式,例如转换等,这也可以转换为
:class=“{active:todo.isActive}”

通过使用这种方法,您可以使用相同的逻辑来创建方法,例如
completeTodo
removeTodo

为了显示/隐藏实际的完整列表,我添加了一个
showList
prop

我注意到您正在使用
v-bind
v-on
-这绝对有效,但VUE^2.0可以处理:-)

我还注意到您正在为HTML属性使用
单引号。。。虽然这不会破坏您的标记,但我认为最好将它们保留为
双引号

var vm=new Vue({
el:“#应用程序”,
数据:{
待办事项:[],
显示列表:错误
},
挂载(){
这个。getTodos()
},
方法:{
getTodos(){
axios.get()https://jsonplaceholder.typicode.com/todos')
。然后(res=>{
res.data=res.data.map(todo=>{
todo.isActive=false
返回待办事项
})
this.todos=res.data
})
},
showTodos(){this.showList=!this.showList},
切换TODO(id){
this.todos=this.todos.map(todo=>{
if(todo.id==id){
todo.isActive=!todo.isActive
}
返回待办事项
})
}
}
})

{{this.showList?'Hide':'Show'}}Todos
切换待办事项
  • {{todo.title}
  • 任务状态:{{todo.completed}
.主动{ 边框:2倍纯绿; }
使用
axios
API,我得到TODO,并实际循环到各个TODO上,并对所有TODO应用
isActive
道具。 将todo'
id
传递给方法时,现在可以通过
toggleTodo
切换这些道具。:-)

请注意,我已经在
ul
上应用了
v-if=“todo.isActive”
,如果您想应用一些样式,例如转换等,这也可以转换为
:class=“{active:todo.isActive}”

通过使用这种方法,您可以使用相同的逻辑来创建方法,例如
completeTodo
removeTodo

为了显示/隐藏实际的完整列表,我添加了一个
showList
prop

我注意到您正在使用
v-bind
v-on
-这绝对有效,但VUE^2.0可以处理:-)

我还注意到您正在为HTML属性使用
单引号。。。虽然这不会破坏您的标记,但我认为最好将它们保留为
双引号

var vm=new Vue({
el:“#应用程序”,
数据:{
待办事项:[],
显示列表:错误
},
挂载(){
这个。getTodos()
},
方法:{
getTodos(){
axios.get()https://jsonplaceholder.typicode.com/todos')
。然后(res=>{
res.data=res.data.map(todo=>{
todo.isActive=false
返回待办事项
})
this.todos=res.data