vue开发中,把有统一功能的部分提取出来,做为一个独立的组件,在须要使用的时候引入,能够有效减小代码冗余.
难点在于若是封装,使用,如何传参,派发事件等,我会采起倒叙的方式进行说明.
(本文总结于Vue2实战解密一书)
代码以下:
封装组件BookList.vuevue
<template> <div class="book-list"> <div class="header"> <div class="heading">{{heading}}</div> <div class="more">更多...</div> </div> <div class="book-items"> <div class="book" v-for="book in books"> <div class="cover"> <img :src="book.imgUrl" /> </div> <div>{{book.title}}</div> <div>{{book.authors | join}}</div> </div> </div> </div> </template> <script> export default{ props:['heading','books'], filters:{ join(args){ return args.join(','); } } } </script>
要向组件输入数据就不能用data来做为数据容器了,由于data是一个内部对象,此时要换成props 咱们能够这样理解: data的做用域是仅仅适用于内部,而对于外部是不可见的,props是内部外部均可见,是一个公共的组件成员变量.
Home.vue 组件代码以下:code
<template> <div class="section"> <book-list :books="books1" heading="书列表1"></book-list> </div> <div class="section"> <book-list :books="books2" heading="书列表2"></book-list> </div> </template> <script> import BookList from './components/BookList.vue' export default{ data(){ return{ books1:[], books2:[], } }, components:{ //注册自定义组件 BookList } </script>