el-dialog弹框里引入的组件只会触发一次组件里面的方法,再次打开不起作用,已解决。

6 篇文章 0 订阅
1 篇文章 0 订阅

el-dialog弹框因为是用display:none和display:block来控制显示隐藏的,dom元素不会被删除,所以dialog弹框里面的内容只会初始化的时候创建dom元素渲染页面,如果里面有组件且组件在初始化时候会调用方法,那么这个方法只会在第一次打开弹框时调用!

通常会有需求:组件嵌套在dialog弹框中,希望在父组件中每次打开弹框都会重新执行子组件中mounted中的方法!

父组件:

<template>
  <div class="dialgos">
    <el-button type="text" @click="handleClick">点击打开 Dialog</el-button>
    <!-- 选择给dialog弹框加个v-if 就可以实现弹框每次打开会会重新创建里面的元素包括引入的组件,相当于重新渲染重新执行组件的方法(缺点是代码不优美,不利于底层的diff算法) -->
    <el-dialog title="提示" :visible.sync="dialogVisible" width="30%" v-if="dialogVisible">
      <p style="margin-bottom:20px"> 这是组件引入的地方</p>
      <Child />
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import Child from '../components/Child/index.vue'
export default {
  components: {
    Child
  },
  data() {
    return {
      dialogVisible: false
    }
  },
  methods: {
    //此方法打开弹框
    handleClick() {
      this.dialogVisible = true
    }
  }
}
</script>

<style>
</style>

子组件:

<template>
  <div>
    我是子组件
  </div>
</template>

<script>
export default {

  //可以看到每次打开弹框下面mounted的方法都会执行
  mounted() {
    console.log("我是子组件");
  }
}
</script>

<style>
</style>

需求实现!缺点就是频繁的创建和销毁dom元素,影响页面加载速度,当然还有别的方法可以实现的!只不过这个更便捷

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值