{{define "component/themeSwitchTemplate"}} <template> <a-switch size="small" :default-checked="themeSwitcher.isDarkTheme" @change="themeSwitcher.toggleTheme()"> </a-switch> </template> {{end}} {{define "component/themeSwitcher"}} <script> function createThemeSwitcher() { const isDarkTheme = localStorage.getItem('dark-mode') === 'true'; const theme = isDarkTheme ? 'dark' : 'light'; document.querySelector('body').setAttribute('class', theme) return { isDarkTheme, get currentTheme() { return this.isDarkTheme ? 'dark' : 'light'; }, toggleTheme() { this.isDarkTheme = !this.isDarkTheme; localStorage.setItem('dark-mode', this.isDarkTheme); document.querySelector('body').setAttribute('class', this.isDarkTheme ? 'dark' : 'light') }, }; } const themeSwitcher = createThemeSwitcher(); Vue.component('theme-switch', { props: [], template: `{{template "component/themeSwitchTemplate"}}`, data: () => ({ themeSwitcher }), }); </script> {{end}}