最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Electron+Vue3 MAC 版日历开发记录(25)——theme设置

    正文概述 掘金(叶梅树)   2021-06-26   724

    这是我参与更文挑战的第25天,活动详情查看: 更文挑战

    Electron+Vue3 MAC 版日历开发记录(25)——theme设置

    今天,我们来说一说主题 Theme 的设置,对于一个应用来说,不可能没有几种主题可供选择,至少有 light 和 Dark 来匹配白天和黑夜的电脑主题。

    说之前,先把之前没加的字体加上:

    import {createApp} from 'vue';
    import App from '/@/App.vue';
    import router from '/@/router';
    import { store, key } from '/@/store';
    // 等宽字体
    import 'vfonts/FiraCode.css'
    // 通用字体
    // import 'vfonts/Lato.css'
    const app = createApp(App);
    app
      .use(router)
      .use(store, key);
    
    app.mount('#app');
    

    等宽字体:

    Electron+Vue3 MAC 版日历开发记录(25)——theme设置

    通用字体:

    Electron+Vue3 MAC 版日历开发记录(25)——theme设置

    个人还是喜欢等宽字体。

    主题设置 Demo

    首先,我们设置 DarkTheme 主题看看效果:

    // APP.vue
    
    <template>
      <n-config-provider :theme="darkTheme">
        <router-view />
      </n-config-provider>
    </template>
    
    <script lang="ts">
    import {defineComponent} from 'vue';
    import { NConfigProvider, darkTheme } from 'naive-ui'
    
    export default defineComponent({
      name: 'App',
      components: {
        NConfigProvider,
      },
      setup() {
        return {
          darkTheme
        }
      }
    });
    </script>
    

    看起来是这么回事:

    Electron+Vue3 MAC 版日历开发记录(25)——theme设置

    接下来我们把主题 Theme 作为一个 Setting 项来对待。

    Setting

    在「通用设置」中,我们增加一组单选按钮组件:NRadioGroup来自定义主题:

      <n-tab-pane
        name="normalSetting"
        tab="通用设置"
        display-directive="show"
      >
        <n-space vertical>
          <n-radio-group
            v-model:value="themeValue"
            name="themeGroup"
            @update-value="updateTheme"
          >
            <n-radio-button key="lightTheme" value="lightTheme">
              浅色主题
            </n-radio-button>
            <n-radio-button key="darkTheme" value="darkTheme">
              深色主题
            </n-radio-button>
          </n-radio-group>
    

    这里主要通过 @update-value 事件来获取单选按钮的 Value 值:

      methods: {
        updateTheme(value: any): void {
          this.store.commit('changeThemeValue', value);
        },
    

    当然,这里我们还是需要借助 Vuex 来保存和传递 theme value。

    theme value store

    export const store = createStore<State>({
      state: {
        themeValue: 'lightTheme',
      },
      mutations: {
        changeThemeValue(state, themeValue) {
          state.themeValue = themeValue;
        },
      },
      actions: {
        changeThemeValue({ commit }) {
          commit('changeThemeValue');
        },
      },
      plugins: [dataState],
    });
    

    这代码已经相当熟悉了,我就不再解释了。接下来看主路由处我们引用的代码。

    App.vue

    <template>
      <n-config-provider :theme="themeValue">
        <router-view />
      </n-config-provider>
    </template>
    
    <script lang="ts">
    import { defineComponent } from 'vue';
    import { NConfigProvider, darkTheme } from 'naive-ui';
    import { useStore } from '/@/store';
    
    export default defineComponent({
      name: 'App',
      components: {
        NConfigProvider,
      },
      setup() {
        const store = useStore();
        return {
          store,
          darkTheme
        };
      },
      computed: {
        themeValue(): any {
          return this.store.state.themeValue == 'darkTheme' ? darkTheme : null;
        }
      }
    });
    </script>
    

    这里,我主要是防止 Store 的异步问题,用 computed 方式,获取 themeValue 值,再赋值给 n-config-provider :theme="themeValue"

    这样,我们的全局主题设置就算完成了:

    lightTheme:

    Electron+Vue3 MAC 版日历开发记录(25)——theme设置

    darkTheme:

    Electron+Vue3 MAC 版日历开发记录(25)——theme设置

    小结

    至于下一步,我们基于主题 Theme 还有不少需要做的,如:

    1. 利用 GlobalThemeOverrides 制作我们需要的自定义主题样式;
    2. 创建适配主题的组件;
    3. 我们发现 FullCalendar 还是保留它之前的主题,这个我们需要重新看看怎么协同。

    未完待续!


    起源地下载网 » Electron+Vue3 MAC 版日历开发记录(25)——theme设置

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元