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>