Vue中父子组件通讯之todolist组件功能开发
程序员文章站
2023-11-03 20:25:40
一、todolist功能开发
一、todolist功能开发
<div id="root"> <div> <input type="text" v-model="inputvalue"> <button @click="handlesubmit">提交</button> </div> <ul> <li v-for="(item, index ) of list" :key="index">{{item}} </li> </ul> </div> <script> new vue({ el:"#root", data:{ inputvalue:'', list:[] }, methods:{ handlesubmit:function(){ this.list.push(this.inputvalue); this.inputvalue=''; } } }) </script>
二、todolist组件拆分
定义组件,组件和组件之间通讯
1、全局组件
<div id="root"> <div> <input type="text" v-model="inputvalue"> <button @click="handlesubmit">提交</button> </div> <ul> <todo-item></todo-item> </ul> </div> <script> vue.component('todo-item',{ template:'<li>item</li>' }) ...
2、局部组件
要注册,否则会报错:
vue.js:597 [vue warn]: unknown custom element: <todo-item> - did you register the component correctly? for recursive components, make sure to provide the "name" option.
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>document</title> <script src="./vue.js"></script> </head> <body> <div id="root"> <div> <input type="text" v-model="inputvalue"> <button @click="handlesubmit">提交</button> </div> <ul> <todo-item></todo-item> </ul> </div> <script> //全局组件 // vue.component('todo-item',{ // template:'<li>item</li>' // }) var todoitem={ template:'<li>item</li>' } new vue({ el:"#root", components:{ 'todo-item':todoitem }, data:{ inputvalue:'', list:[] }, methods:{ handlesubmit:function(){ this.list.push(this.inputvalue); this.inputvalue=''; } } }) </script> </body> </html>
3、组件传值
父组件向子组件传值是通过属性的形式。
<div id="root"> <div> <input type="text" v-model="inputvalue"> <button @click="handlesubmit">提交</button> </div> <ul> <todo-item v-for="(item ,index) of list" :key="index" :content="item" ></todo-item> </ul> </div> <script> vue.component('todo-item',{ props: ['content'], //接收从外部传递进来的content属性 template:'<li>{{content}}</li>' }) new vue({ el:"#root", data:{ inputvalue:'', list:[] }, methods:{ handlesubmit:function(){ this.list.push(this.inputvalue); this.inputvalue=''; } } }) </script>
三、组件与实例的关系
new vue()实例
vue.component是组件
每一个vue组件又是一个vue的实例。
任何一个vue项目都是由千千万万个vue实例组成的。
每个vue实例就是一个组件,每个组件也是vue的实例。
四、实现todolist的删除功能
子组件通过发布订阅模式通知父组件。
<div id="root"> <div> <input type="text" v-model="inputvalue"> <button @click="handlesubmit">提交</button> </div> <ul> <todo-item v-for="(item ,index) of list" :key="index" :content="item" :index="index" @delete='handledelete' ></todo-item> </ul> </div> <script> vue.component('todo-item',{ props: ['content','index'], //接收从外部传递进来的content属性 template:'<li @click="handledeleteitem">{{content}}</li>', methods:{ handledeleteitem:function(){ this.$emit('delete',this.index); } } }) 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>
总结
以上所述是小编给大家介绍的vue中父子组件通讯之todolist组件功能开发,希望对大家有所帮助