我是新的vuejs。如下所示的程式碼,isBtnDigitizePolygonClicked
是一個響應式變數。我試圖在isBtnDigitizePolygonClicked
的值發生變化時執行一些程式碼作為副作用。為此,我使用了watch
,如下所示的程式碼。
我現在遇到的問題是,當程式碼執行時,儘管呼叫了onDigitizePolygon
方法,但在被觀察的變數isBtnDigitizePolygonClicked
中的日誌訊息從未顯示出來,就好像觀察者沒有執行。
請告訴我為什麼會發生這種情況以及如何解決。
程式碼:
let isBtnDigitizePolygonClicked = ref(true); ... ... watch: { isBtnDigitizePolygonClicked(newVal, oldVal) { console.log(debugTag, 'newVal:', newVal); console.log(debugTag, 'oldVal:', oldVal); if (digitizePolygonInteractions) { if (newVal == true) { digitizePolygonInteractions.remove(); } else { digitizePolygonInteractions.add(); } } else { throw new Error('WTF.digitizePolygonInteractions is:'); } }, immediate: false, }, computed: { compPropsIsBtnDigitizePolygonDisabled() { if (isBtnDigitizePolygonClicked.value == true) { return values.CONST_STRING_DIGITIZE; } else { return values.CONST_STRING_STOP_DIGITIZE; } }, }, methods: { onDigitizePolygon() { console.info(debugTag, 'onDigitizePolygon()'); isBtnDigitizePolygonClicked.value = !isBtnDigitizePolygonClicked.value; }, }
模板:
<button @click="onDigitizePolygon()">{{ compPropsIsBtnDigitizePolygonDisabled }}</button>
使用 options-api,您可以直接寫:
data() {..}
中的內容會自動響應式。 因此,不需要使用我認為我的錯誤在於,我沒有將
isBtnDigitizePolygonClicked
加到`data()`的回傳值中程式碼: