鍍金池/ 問答/HTML/ vue watch不到computed屬性的變化?

vue watch不到computed屬性的變化?

computed計算來自store的數(shù)據(jù),返回給模板調(diào)用,模板中使用v-model雙向綁定數(shù)據(jù),當(dāng)改變界面上數(shù)據(jù)時,deep watch該數(shù)據(jù)并不成功。

數(shù)據(jù)計算和watch:
clipboard.png

模板使用:
clipboard.png

回答
編輯回答
愛礙唉

watch監(jiān)聽vuex和<input>雙向綁定的數(shù)據(jù)都可以監(jiān)聽成功,你那個對應(yīng)的return getDefaultTime(widgetConfig.timeType,widgetConfig.timeType)中的getDefaultTime函數(shù)是返回的對象嗎

2017年3月7日 10:03
編輯回答
苦妄

你的這個我覺得應(yīng)該可以給InputNumber 設(shè)置一個@change事件,然后將改變的方法放在methods里邊,從而改變store的值,第一次加載的時候可以通過computed拿到store 的值,就不設(shè)置偵聽器了

2017年9月1日 01:19
編輯回答
陌如玉

先說解決方法: 把watch的timeConfig改成'$store.state.widgetConfig'.


因為你computed的時候調(diào)用了getDefaultTime, vue調(diào)用這個function添加依賴失敗了.


順帶提一下, computed綁定v-model是錯誤的行為, v-model等同于@input='e => timeConfig = e.target.value', 也就是等于你在代碼中改變了computed的值和vuex里的值.
壞處是引起抖動.
解決方案是使用get, set方法: 類似于:

{
    computed: {
        timeConfig: {
            get () {
                return getDefaultTime(this.$store.data)
            },
            set () {
                this.$store.commit('mutation')
            }
        }
    }
2018年1月3日 21:31
編輯回答
陪我終

計算屬性如果要修改他的值,需要為它增加set方法,上面沒有set方法,v-model不能修改它的值,值不會改變,自然watch不到,https://cn.vuejs.org/v2/api/#...

2017年11月9日 02:40