<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello World</title> <script src="./vue.js"></script> </head> <body> <div id="root"> <input type="text" v-model="todoValue"> <button @click="handleBtnClick">提交</button> <ul> <todo-item v-bind:content="item" v-for="item in list"></todo-item> </ul> </div> <script> // 全局组件 // Vue.component('TodoItem', { // props: ['content'], // template: "<li>{{content}}</li>" // }); //局部组件 var TodoItem = { props: ['content'], template: "<li>{{content}}</li>" }; var app = new Vue({ el: '#root', components:{ TodoItem:TodoItem //注册局部组件 }, data: { list: [], todoValue: '' }, methods: { handleBtnClick: function () { this.list.push(this.todoValue); this.todoValue = '' } } }) </script> </body> </html> <!-- 逻辑解析: 首先定义一个全局组件Vue.component[TodoItem] ->通过list决定生成多少个todo-item组件 同时将list对象的内容 通过v-bind语法 借助content变量 传给todo-item这个子组件 在全局组件定义一个props 接收content 载将content渲染在模板上 -->