记录-vue3调用el-dialog封装子组件

<el-dialog v-model="showCameraEdit" width="400px" title="修改摄像头设置" @close="close" draggable>
const prop = defineProps({
  showCameraEdit:{
    type: Boolean,
    default: false
  }
})
const emit = defineEmits(['closeCamera'])

const showCameraEdit = ref(false)

//prop.showCameraEdit值变化时,赋值给绑定值
watch(()=>prop.showCameraEdit,()=>{showCameraEdit.value = prop.showCameraEdit})

//关闭弹窗
const close = () =>{
  emit('closeCamera', false)
}

以上弹窗子组件。

<camera-edit :showCameraEdit="showCameraEdit" @closeCamera="showCameraEdit=false">
</camera-edit>
const showCameraEdit = ref(false)//编辑弹窗显示

//打开编辑摄像头弹窗
const toEditCamera = () =>{
  showCameraEdit.value = true;
}

以上父组件。

写过几次了,每次方式还不一样,之前用computed包裹prop可以,现在又不行了,所以记录下,以便日后查询。

7.7新增:使用 toRefs() 更方便

官方文档:

 当从组合式函数中返回响应式对象时,toRefs 相当有用。使用它,消费者组件可以解构/展开返回的对象而不会失去响应性:

function useFeatureX() {
  const state = reactive({
    foo: 1,
    bar: 2
  })

  // ...基于状态的操作逻辑

  // 在返回时都转为 ref
  return toRefs(state)
}

// 可以解构而不会失去响应性
const { foo, bar } = useFeatureX()

使用toRefs包裹prop:

import {ref, defineProps, toRefs} from 'vue'

const prop = defineProps({
  color: {
    type: String,
    default: 'rgba(255, 0, 0, 1)'
  }
})

const { color } = toRefs(prop)//语法糖接收父组件数据需用toRefs包裹

:color任具有响应性

以上任有问题,可忽视。

最终:

子组件:

<el-color-picker v-model="color" show-alpha @change="change"/>

const prop = defineProps({
  color: {
    type: String,
    default: ''
  }
})
const emit = defineEmits(['selectColor'])

const color = ref(prop.color)//设置不同默认值

//更改颜色
const change = () => {
  emit('selectColor', color.value)
}

父组件:

<color-picker :color="BkColor" @select-color="changeBkColor"></color-picker>

const BkColor = ref('rgba(0,0,0,1)')//背景颜色--设置默认值

//背景颜色变化
const changeBkColor = (val) =>{
  BkColor.value = val--更改prop数据
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
封装一个全局的函数式组件,你可以遵循以下步骤: 1. 在 `src` 目录下创建一个新的文件夹,例如 `components`,并在该文件夹中创建一个名为 `ElDialog.vue` 的文件。 2. 在 `ElDialog.vue` 文件中编写组件的代码,如下所示: ```html <template> <div v-if="visible" class="el-dialog"> <h2 class="el-dialog-title">{{ title }}</h2> <p class="el-dialog-content">{{ content }}</p> <!-- 其他内容... --> </div> </template> <script> import { defineComponent, reactive } from 'vue'; export default defineComponent({ name: 'ElDialog', props: { title: String, content: String, // 其他 props... }, setup(props) { const visible = reactive({ value: false }); return { visible, }; }, }); </script> <style scoped> .el-dialog { /* 样式定义 */ } .el-dialog-title { /* 样式定义 */ } .el-dialog-content { /* 样式定义 */ } </style> ``` 在上述代码中,我们使用了 `reactive` 函数来创建响应式数据 `visible`,用于控制组件的显示与隐藏。通过在父组件中修改 `visible.value` 的值,可以控制 `el-dialog` 的显示状态。 3. 在 `src` 目录下创建一个名为 `main.js` 的文件,并在其中注册全局的函数式组件: ```javascript import { createApp } from 'vue'; import ElDialog from './components/ElDialog.vue'; const app = createApp(); app.component('el-dialog', ElDialog); app.mount('#app'); ``` 在上述代码中,我们使用 `app.component` 方法来注册 `el-dialog` 组件为全局组件。这样,在你的应用程序的任何地方,你都可以使用 `<el-dialog>` 标签来引用该组件。 4. 在你的应用程序的主入口文件中,例如 `App.vue`,使用 `<el-dialog>` 标签来调用组件: ```html <template> <div id="app"> <!-- 其他内容... --> <el-dialog title="对话框标题" content="对话框内容"></el-dialog> </div> </template> <script> export default { // 组件的逻辑... }; </script> <style> /* 样式定义... */ </style> ``` 现在,你就可以在整个应用程序中使用 `<el-dialog>` 标签,并传递所需的属性来显示全局的函数式组件了。 请注意,以上示例只是一个简单的演示,你可以根据实际需求进行更复杂的组件逻辑和样式定义。同时,也可以根据项目的具体情况,在全局注册组件使用其他的标签名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值