💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 页面组件化 就是把一个整体的页面,切割成一个一个的部分.一个部分就称作一个组件.合理的拆分组件,可以把一个大型的项目拆分成小份,和拼积木一样. ## 不使用组件化的todolist ``` <div id="app"> <input type="text" v-model="inputValue"> <input type="button" value="提交" @click="submit"> <ul> <li v-for="value of lists">{{value}}</li> </ul> </div> <script> var vm = new Vue({ el: '#app', data: { lists: ['第一课的内容', '第二课的内容'], inputValue: '' }, methods: { submit() { if (this.inputValue === '') { return; } this.lists.push(this.inputValue); this.inputValue = ''; } } }) ``` ## 全局组件 ``` <div id="app"> <input type="text" v-model="inputValue"> <input type="button" value="提交" @click="submit"> <ul> <todo-item v-bind:content="item" v-for="item of lists"></todo-item> //通过v-bind父组件向子组件传值 </ul> </div> <script> //全局的组件 Vue.component('TodoItem', { props: ['content'], template: '<li>{{this.content}}</li>', }); var vm = new Vue({ el: '#app', data: { lists: ['第一课的内容', '第二课的内容'], inputValue: '' }, methods: { submit() { if (this.inputValue === '') { return; } this.lists.push(this.inputValue); this.inputValue = ''; } } }) </script> ``` ## 局部的组件 ``` <div id="app"> <input type="text" v-model="inputValue"> <input type="button" value="提交" @click="submit"> <ul> <todo-item v-bind:content="item" v-for="item of lists"></todo-item> </ul> </div> <script> var TodoItem = { props:['content'], template: '<li>{{this.content}}</li>', }; var vm = new Vue({ el: '#app', components:{ TodoItem:TodoItem, //注册要vue实例中 }, data: { lists: ['第一课的内容', '第二课的内容'], inputValue: '' }, methods: { submit() { if (this.inputValue === '') { return; } this.lists.push(this.inputValue); this.inputValue = ''; } } }) </script> ``` ## 子组件向父组件传值 ``` <div id="app"> <input type="text" v-model="inputValue"> <input type="button" value="提交" @click="submit"> <ul> <todo-item v-bind:content="item" v-bind:index="index" v-for="item,index of lists" @delete="handleItemDelete"></todo-item> </ul> </div> <script> var TodoItem = { props: ['content', 'index'], template: '<li @click="handleItemClick">{{this.content}}</li>', methods: { handleItemClick() { this.$emit('delete', this.index); //子组件向外粗发一个delete的事件 } } }; var vm = new Vue({ el: '#app', components: { TodoItem: TodoItem, //注册要vue实例中 }, data: { lists: ['第一的内容', '第二的内容'], inputValue: '' }, methods: { submit() { if (this.inputValue === '') { return; } this.lists.push(this.inputValue); this.inputValue = ''; }, handleItemDelete(index) { this.lists.splice(index, 1); } } }) </script> ```