How to watch prop even if it does not change?

可紊 提交于 2021-01-20 13:35:27

问题


I have watcher with the same name as a prop. The prop is dynamically set in a parent component on some event. I need something that triggers some function in the child component with property value every time the event is triggered on parent -even if the prop it set is the same. Is there any watcher option or other method of handling such case which would allow me to do that ?

What I tried (this is in Post component):

watch: {
    replyClicked:
    {
        handler(newVal, oldVal)
        {
            console.log(newVal, oldVal);
        },
        immediate:true
    }
},

the console.log only prints when newVal is different from oldVal, I need some function to trigger even if they are the same. The parent component looks like this:

<RenderPost @onReply="onReply" />
<Post :replyClicked="replyClicked" />

and these are the parent data and method:

data()
{
    return {
        replyClicked : null
    }
},
methods :
{
    onReply(id)
    {
        this.replyClicked = id;
    }
}

回答1:


You could use immediate option :

watch:{
  yourProp:{
   handler(newval,oldVal){

   },
   immediate:true,
   deep:true //if the prop is an object or an array

 }

}

EDIT

since the old value is the same as the new one, you could try this workaround, by defining the prop as an object by adding a field that always changes :

data()
{
    return {
        replyClicked : {
          changeCount:0,
          id:null
         }
    }
},
methods :
{
    onReply(id)
    {
        this.replyClicked ={id, changeCount:this.replyClicked.changeCount+1}
    }
}

child component :

watch: {
    replyClicked:
    {
        handler(newVal, oldVal)
        {
            console.log(newVal, oldVal);
        },
        immediate:true,
        deep:true
    }
},


来源:https://stackoverflow.com/questions/65197803/how-to-watch-prop-even-if-it-does-not-change

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!