【发布时间】:2021-03-20 17:04:17
【问题描述】:
我们有一个可组合函数 useApplicationPreferences() 在 Vue 2 中与 Composition API 一起使用。此函数公开了一个计算后的不可写 ref,称为 darkMode:
//useApplicationPreferences.ts
import { reactive, computed } from '@vue/composition-api'
import { Dark } from 'quasar'
const defaultState = () => ({
preference: {
darkMode: true,
},
})
const state = reactive(defaultState())
export const useApplicationPreferences = () => {
const setPreference = async (
preference: {
darkMode?: boolean
}
) => {
if (preference.darkMode != null) {
Dark.set(preference.darkMode)
state.preference.darkMode = preference.darkMode
}
}
return {
darkMode: computed(() => state.preference.darkMode),
setPreference,
}
}
我们在应用的另一部分成功地使用了这个功能,就在用户登录之后。这是从后端获取首选项并在应用程序中设置它们。我们遇到的问题是在另一个页面上,我们有一个带有 `v-model="darkModeToggle" 的切换按钮。
// Settings.vue
import { defineComponent, ref, watch } from '@vue/composition-api'
import { useApplicationPreferences } from './useApplicationPreferences'
export default defineComponent({
setup() {
const { darkMode, setPreference } = useApplicationPreferences()
const darkModeToggle = ref(darkMode.value)
watch(
() => darkModeToggle.value,
async (newValue) => {
await setPreference({ darkMode: newValue }, { saveToBackend: true })
}
)
return {
darkModeToggle,
}
},
})
如何将darkMode 从可组合连接到Settings.vue 模板中的darkModeToggle 引用?计算的属性darkMode 不可写。但是切换应该将其用作值,并且能够通过调用 setPreference() 来更改其值。
感谢您的帮助。
【问题讨论】:
标签: vue.js vuejs2 vue-component vue-composition-api