鍍金池/ 問答/HTML/ vue中,watch首次變化不觸發(fā)問題

vue中,watch首次變化不觸發(fā)問題

在vue項(xiàng)目中,有以下代碼:

<template>
    <div>
        <basic-info v-if="pBasicInfoVO.isShow"></basic-info>
        <ordiary-info v-if="pOrdinaryAttrInfoVO.isShow"></ordiary-info>
        <div class="footer">
            <a href="javascript:;" class="btn btn-success" @click="saveWarePublishVO">Save</a>
            <a href="javascript:;" class="btn btn-cancel">Cancel</a>
        </div>
    </div>
</template>

<script type="text/ecmascript-6">
    import * as type from "store/modules/warePublish/type"
    
    export default {
        data() {
            return {
                breadcrumbs: [
                    {title: "Location"},
                    {title: "Product Management"},
                    {title: "Product Creation"}
                ],
                activeStep : 1,
                isOpen: false,
            }
        },
      
        methods: {
            saveWarePublishVO() {
                this.setIsValidate(!this.isValidate)
                let isBasicInfoVoValid = this.basicInfoVO.validateFlag
                let isOrdinaryAttrInfoVOValid = this.ordinryAttrbuteInfoVO.validateFlag
                this.$store.dispatch(type.SAVE_WARE_INFO)
            },
            ...mapMutations({
                setIsValidate: 'SET_VALIDATE',
                setAlertConfig: 'SET_ALERT_CONFIG'
            })
        },
     computed: {
         ...mapGetters([
            'isValidate'
            'basicInfoVO',
            'ordinryAttrbuteInfoVO'
        ])
     }
        
    }
 }
</script>

點(diǎn)擊save的時(shí)候,取反vuex中isValidate(默認(rèn)為false),然后在每一個(gè)組件監(jiān)聽watch isValidate,但是在ordiary-info組件中監(jiān)聽不到isValiate的變化,但是如果點(diǎn)擊checkbox,再點(diǎn)擊save按鈕,就可以監(jiān)聽到isValidate的變化,這是什么原因呢?

<template>
    <div>
        <div class="form-group">
            <label class="control-label" :class="{necessary: attribute.required}">{{ attribute.propertyName }}:</label>
            <div class="content">
                <div class="form-item ell" v-for="item in lessAttriList">
                    <input :type="inputType"
                           :id="getId()"
                           :name="getId(false)"
                           :class="inputType"
                           :value="item.propertyValueId"
                           v-model="checkedIdList"
                           v-validate="{
                                    required: attribute.required
                               }"/>
                    <label :for="getId(false)" :title="item.valueData">{{ item.valueData }}</label>
                </div>
                <div v-if="moreAttriList.length > 0 && isMore">
                    <div class="form-item ell" v-for="item in moreAttriList">
                        <input :type="inputType"
                               :id="getId()"
                               :name="getId(false)"
                               :class="inputType"
                               :value="item.propertyValueId"
                               v-model="checkedIdList"
                               v-validate="{
                                    required: attribute.required
                               }"/>
                        <label :for="getId(false)" :title="item.valueData">{{ item.valueData }}</label>
                    </div>
                </div>
            </div>
            <a v-if="moreAttriList.length > 0" href="javascript:;" class="more-btn" :class="[{up: isMore}]" @click="showMore">{{ isMore ? 'Less' : 'More'}}</a>
        </div>
        <p class="text-danger m-l-211" v-show="showErrMsg">required.</p>
    </div>
</template>


computed: {
        ...mapGetters([
            'isValidate',
            'ordinryAttrbuteInfoVO'
        ])
    }
     watch: {
        isValidate(old, newVal) {
            console.log(old, newVal)
            })
        }
    }
回答
編輯回答
初心

你這個(gè)isValidate是復(fù)雜數(shù)據(jù)類型嗎,復(fù)雜數(shù)據(jù)類型要用深度監(jiān)聽

2017年7月15日 05:46