【问题标题】:Is there any way to change props value of a Vue Component from method?有没有办法从方法中更改 Vue 组件的道具值?
【发布时间】:2021-05-21 05:48:22
【问题描述】:

当我单击名为“activityFrom”的日期选择器并在关闭日期选择器时选择日期时,我在我的 Vue 中使用了两个“vuejs-datepicker”组件我正在触发组件定义的功能“@selected”我需要在哪里更改第二个日期选择器“activityTo”的道具,它是 disabledDates 道具。

这是我的第一个组件

<datepicker  @selected="changeNextDate" v-model="$v.fields.activityFrom.$model" :disabledDates="disabledDates" ></datepicker>

这是我的第二个组件

<datepicker ref="activityTo" v-model="$v.fields.activityTo.$model" :disabledDates="disabledDates" ></datepicker>

这是我的代码

<script>
import Datepicker from 'vuejs-datepicker';     
import moment from 'moment'; 
export default {
    name:'Home',
    data(){
        return{
            fields:{
                destination:'',
                activityFrom:'',
                activityTo:'',
            },
            disabledDates:{
                to: new Date((new Date().getTime()+(2*24*60*60*1000)) -  8640000)
            },
            disabledDates2:{
              to: new Date((new Date().getTime()+(3*24*60*60*1000)) -  8640000)
            }

        }
    },
    components:{
        Datepicker
    },
    methods:{
       customFormatter(date) {
          return moment(date).format('MM/DD/YYYY');
       },
        changeNextDate(event){
            console.log('Date has been seleced');
            this.$refs.activityTo.disabledDates = disabledDates2;
       }
    }
}
</script> 

但是当我尝试从方法更改道具时,它向我发送以下错误

避免直接改变prop,因为值会被覆盖 每当父组件重新渲染时。相反,使用数据或 基于道具值的计算属性。道具被变异: “禁用日期”

是否有任何更改道具的解决方案,因为我确实在单击第一个元素的功能时更改了第二个元素。请告诉我如何解决这个问题。

【问题讨论】:

    标签: vue.js vuejs-datepicker


    【解决方案1】:

    您无需访问this.$refs.activityTo 即可更新第二个组件的道具。由于道具是从你的父母那里传下来的,你可以在那里更新它们,例如:

    changeNextDate(event){
      this.disabledDates = this.disabledDates2;
    }
    

    我也不确定你为什么使用v-model 语法;我以前从未见过,我认为没有必要。你可以这样做:v-model="fields.activityFrom"v-model="fields.activityTo"

    【讨论】:

    • 这也适用于 activityFrom "disabledDate" 也许我可以在 activityTo 中将 disabledDates 的 prop 更改为 disabledDates2
    • 是的,如果 disabledDate 值在您的日期选择器组件中应该不同,那么您将需要在父组件中创建两个单独的属性并传递正确的属性。
    猜你喜欢
    • 2022-01-25
    • 2020-10-16
    • 2017-09-27
    • 1970-01-01
    • 2019-11-10
    • 2020-09-30
    • 2020-05-01
    • 1970-01-01
    • 2018-12-30
    相关资源
    最近更新 更多