需求分析:javascript
來看自帶計算器的構成,計算器(左) 菜單(中) 轉換器(右):html
個人構思是:vue
App.vue
調用java
<template> <div> <calculator :cal-num-options="{'basic':true, 'science':false, 'programmer':false}" :cal-unit-options="true"> </calculator> <!--計算器--> </div> </template> <script> import Calculator from './Calculator.vue' //導入組件 export default{ components:{Calculator} //註冊組件 } </script>
Calculator.vue
父組件數組
<template> <div id="calculator"> <select v-model="menu" >...</select> <!--菜單--> <cal-num :menu="menu"> </cal-num> <!--計算器-數值--> <cal-unit :menu="menu"> </cal-unit> <!--計算器-單位--> </div> </template>
<script> import CalNum from './CalNum.vue' //導入組件 import CalUnit from './CalUnit.vue' export default{ props: { //接受外部參數 'calNumOptions':{ type: Object, default: {'basic':true, 'science':false, 'programmer': false} }, 'calUnitOptions':{ type: Boolean, default: false } }, data (){ //自身數據(將要傳給子組件) return{ menu: 'basic' }; }, components:{ //註冊組件 CalNum, CalUnit } } </script>
CalUnit.vue
內容app
<template> <div> ... <!----選擇列表1----> <select @change="selectChange($event,0)"> <option v-for="item in units[menu]" :value="item.ref"> {{item.text}} </option> <!--根據菜單顯示列表內容--> </select> ... </div> </template>
<script> export default{ props:{ menu: String //接受菜單參數 }, data (){ return { ... units:{ //單位 volume:[ {text:'毫升', ref:1}, {text:'升', ref:1000}, ... ] } } } ... } </script>
參考:打造 Vue.js 可複用組件ide
cal-
cal-num
cal-unit
拆分紅若干個小組件calUnitOptions
類型爲 Boolean
,calNumOptions
類型爲 Object
cal-unit
中的 watcher: menu
<select>
標籤綁定數組的元素時,若選項的 value
值相同,則不會觸發綁定的數組的改變。 <div id="app"> <select v-model="myval[0]"> <option v-for="option in options" :value="option.value">{{option.text}}</option> </select> myval is: {{myval}} </div> </template>
<script> export default{ data (){ return { myval:['', ''], options: [ {text: 'A', value: '1'}, {text: 'B', value: '1'}, {text: 'C', value: '3'} ] } } } </script>
<select>
標籤上綁定 change()
方法,修改數組元素的值import Calculator from './Calculator.vue'
,其中 ./
表示當前路徑下,不加的話找不到的<style>
標籤要加上 scoped
屬性,會把樣式做用域限制在當前組件內。