关于props的问题

想通过父组件的状态来控制子组件抽屉的显示,就是那个el-drawer组件。

是否显示是通过给v-madal传递布尔值来控制。

首先尝试的是通过props来控制,父组件是通过v-bind绑定的,我直接把父组件的props赋值给了v-modal,结果报错了(Unexpected mutation of “props” prop.)子组件不可以变更父组件的props。

然后尝试使用defineExpose,暴露子组件方法,使用子组件自己的状态来控制抽屉,成功了。

// 子组件
defineExpose({
  handleOpen,
});
function handleOpen() {
  dialogForm.visible = true;
}
// 父组件
  <AbnormalReport
    ref="abnormalRef"
  />

const abnormalRef = ref();

function handleAbnormal() {
  abnormalRef.value.handleOpen();
}

然后发现有一个解决方法:

父组件在传递布尔的时候不用v-bing,使用v-model:visible=”visible”。然后子组件的抽屉使用:model-value来控制显示,并且再绑定一个事件来触发父组件的事件。

修改状态布尔值在子组件用emit控制父组件的事件来改变状态,成功了。

不太理解?这个抽屉的v-modal导致的问题吗,因为他是属于双向绑定了,就是相当于修改props了?

1月22日

得到答案,原因还是对v-modal的理解欠缺。

v-mode是有value和事件组成的,把props直接放上去,这个事件就会修改props,由于props是单项传递的,因此会导致问题的发生。

使用computed中的get()和set(),在get中返回props;在set中调用emit事件来触发父组件状态的更新,这样就会避免直接修改props。

详情见v-modal这篇文章。

欢迎阅读!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇