qq_莫莫_14
2018-07-13 11:57
<div id="root"> <!--模板--> <input v-model="inputValue" type="text" autofocus=true /> <button @click="handleSubmit">提交</button> <ul> <!--子组件--> <todo-item v-for="(item,index) of list" :key="index" :content="item" :index="index" @delete="handleDelete" > </todo-item> </ul> </div> <script> // 每一个组件都是一个实例 // Vue.component注册或获取全局组件 Vue.component('todo-item',{ // props 可以是数组或对象,用于接收来自父组件的数据 props:['content','index'], template:'<li @click="handleClick">{{content}}{{index}}</li>', methods:{ handleClick:function(){ // $emit触发当前实例上的事件。附加参数都会传给监听器回调。 this.$emit('delete',this.index) } } }) // var TodoItem={ // template:'<li>item</li>' // } //实例 new Vue({ // 挂载点 el:"#root", data:{ inputValue:"", list:[] }, methods:{ handleSubmit:function(){ this.list.push(this.inputValue) this.inputValue="" }, handleDelete:function(index){ this.list.splice(index,1) } } }) </script>
你的代码没错,你是被误导了。
他绑定的list值每次修改都会重新赋值给todo-item。你输入一些数据再添加看看就会发现。
不要直接点添加,你直接点之后他只显示index,但是你删除一个元素后,他的index又重新赋值,所以你看起来像是删除了最后一项。
我今天看了上面的回答,表示没看懂,我相信很多人也是这样,但我找到了解决办法。
把template:'<li @click="handleClick">{{content}}{{index}}</li>'中的赋值方式改成v-text赋值。 即template:'<li v-text="content" @click="handleClick"></li>'
问题就解决了。
要更深入了解可以百度一下,这两种赋值方式的不同。
我和你的问题一样,并不能点击哪个删哪个,最佳回答没看懂,就算是index重新赋值了,我想删除第一项,也是最后一项被删除啊,好懵,请问有人懂吗
我试了 没问题啊
vue2.5入门
146742 学习 · 657 问题
相似问题