三個技能,父組件 —> 子組件傳值(props)、子組件 —> 父組件傳值($emit)、以及插槽(slot);對於一個獨立的組件來說,props是用來為組件內部注入核心的內容;$emit用來使這個獨立的組件通過一些邏輯來融入其他組件中。舉個具體點的例子,假如你要做一輛車,車輪是要封裝的一個獨立組件,props指的就是根據整個車的外形你可以給輪子設置一些你想要的且符合車風格的花紋,圖案等;而$emit的作用則是讓這些輪子能夠和整輛車完美契合的運作起來。
(1)使用props可以實現父子組件之間的傳值
(2)使用this.$emit()可是實現子組件調用父組件的方法
一.在commponents文件創建組件文件
二.組件代碼(寫法)
index.vue
<template>
<div class="cusdealed">
<div class="submited" v-if="showStatus==1">
<div class="submitRes">
<img class="resImg" src="../../common/img/repectSubmit.png" alt="">
</div>
<div class="submitTip tipwidth">該單據已經提交過了,不用重復提交哦!</div>
</div>
<div class="submited" v-if="showStatus==2">
<div class="submitRes">
<img class="resImg" src="../../common/img/invalid.png" alt="">
</div>
<div class="submitTip">單據已失效,不能掃單入庫!</div>
</div>
<div class="submited" v-if="showStatus==3">
<div class="submitRes">
<img class="resImg" src="../../common/img/invalid.png" alt="">
</div>
<div class="submitTip">找不到該單據,不能掃單入庫!</div>
</div>
</div>
</template>
<script type="text/javascript" src="./logic.js"></script>
<style lang="less" scoped>
@import './style.css';
</style>
style.less
//樣式文件
@import '../../common/less/px2rem.less';
@import '../../common/less/base.less';
.cusdealed {
.submited {
.submitRes {
.px2rem(150);
width: @px2rem;
height: @px2rem;
}
.submitRes {
.px2rem(227);
margin: @px2rem auto 0;
.resImg {
width: 100%;
height: 100%;
display: block;
}
}
.submitTip {
.px2rem(58);
// height: @px2rem;
font-family: PingFangSC-Regular;
font-weight: 400;
color: rgba(51, 51, 51, 1);
line-height: @px2rem;
}
.submitTip{
.px2rem(32);
font-size: @px2rem;
}
.tipwidth{
.px2rem(384);
width: @px2rem;
}
.submitTip{
.px2rem(50);
margin: @px2rem auto 0;
}
}
}
logic.js
//邏輯文件
import { Spinner } from 'vux'
export default {
name: 'cusDealing',
data() {
return {
showStatus:1
}
},
components: {
Spinner,
},
props: {
// showStatus: Number
},
computed: {
},
watch: {
showStatus(val) {
console.log(val, 'showStatus---')
return val;
}
},
methods: {
},
mounted() {
}
}
三.用法
引入組件
頁面使用
html:
<!-- 處理完彈窗 -->
<div class="dealed" :style="'padding-top:'+marginTop+'px;height:'+bodyheight+'px;'" v-if="dealStatus==2">
<div class="dealedContent">
<Cusdealed :showStatus="showStatus"></Cusdealed>
<div class="Iknow" @click="Iknow">我知道了</div>
</div>
</div>
js:
效果