国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解vue父子組件關于模態框狀態的綁定方案

2019-11-19 11:23:23
字體:
來源:轉載
供稿:網友

日常開發中經常遇到的一個場景,父組件有很多操作,需要彈窗,例如:

<template>  <div class="page-xxx">    //點擊打開新增彈窗    <button>新增</button>    //點擊打開編輯彈窗    <button>編輯</button>    //點擊打開詳情彈窗    <button>詳情</button>    <Add :showAdd="false"></Add>    <Edit :showEdit="false"></Edit>    <Detail :showDetail="false"></Detail>  </div></template>

子組件:

<div class="page-add">  <el-dialog :visible="dialogVisible" @close="handleClose"></el-dialog></div><script>export default {  data() {    return {      dialogVisible: false,    }  },  methods: {    handleClose(val) {      this.dialogVisible= false    },  },}</script>

如何實現子組件和父組件模態框狀態的同步

方案一:使用.sync 修飾符

父組件:

<template>  <div class="page-xxx">    //點擊打開新增彈窗    <button @click="show = true">新增</button>    <Add :show.sync="show"></Add>  </div></template>

子組件:

<div class="page-add">  <el-dialog:visible="dialogVisible" @close="handleClose"></el-dialog></div><script>export default {  props: {    show: {      type: Boolean    }  },  watch: {    show(value) {      this.dialogVisible= value    }  },  data() {    return {      dialogVisible: false,    }  },  methods: {    handleClose(val) {      this.$emit('update:show', false);    },  },}</script>

方案二:使用v-model

父組件:

<template>  <div class="page-xxx">    //點擊打開新增彈窗    <button @click="show = true">新增</button>    <Add v-model="show"></Add>  </div></template>

子組件:

<div class="page-add">  <el-dialog :visible="dialogVisible" @close="handleClose"></el-dialog></div><script>export default {  props: {    show: {      type: Boolean    }  },  watch: {    show(value) {      this.dialogVisible= value    }  },  data() {    return {      dialogVisible: false,    }  },  methods: {    handleClose(val) {      this.$emit('input', false)    },  },}</script>

computed OR watch ?

對于上面的兩種方案,子組件內部還可以使用計算屬性的寫法

computedexport default {  props: {    show: {      type: Boolean    }  },  computed: {    dialogVisible: {      get() {        return this.show      },      set(value) {        return this.$emit('input', value)      },    },  },  methods: {    handleClose(val) {},  },}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 栾川县| 封开县| 高碑店市| 淅川县| 太和县| 太仆寺旗| 宽甸| 白朗县| 垦利县| 淄博市| 苗栗县| 睢宁县| 崇州市| 新乐市| 安阳县| 德州市| 菏泽市| 肇源县| 宝坻区| 巴马| 海安县| 芦溪县| 永川市| 遂宁市| 焉耆| 蒙城县| 沧州市| 霞浦县| 和田市| 瑞安市| 宁明县| 恩平市| 贵阳市| 巨鹿县| 四子王旗| 彭阳县| 大邑县| 旬阳县| 田林县| 陆川县| 嘉定区|