首页 > 其他分享 >04使用Pinia实现Vuex项目全球化

04使用Pinia实现Vuex项目全球化

时间:2023-01-02 17:13:30浏览次数:57  
标签:return 04 localization state Pinia import applicationConfiguration Vuex store

在上一章中使用的Vuex作为状态管理实现的全球化,这篇文章使用Pinia作为状态管理。

现有用户可能对 Vuex 更熟悉,它是 Vue 之前的官方状态管理库。由于 Pinia 在生态系统中能够承担相同的职责且能做得更好,因此 Vuex 现在处于维护模式。它仍然可以工作,但不再接受新的功能。对于新的应用,建议使用 Pinia。

安装pinia

npm install pinia

main.ts中添加以下代码:

import { createPinia } from 'pinia'
app.use(createPinia())

实现本地化状态管理

添加以下文件stores\ApplicationConfiguration.ts,添加以下代码:

import { AbpClient, ApplicationConfigurationDto } from '@/api-client/client'
import { IConfig } from '@/api-client/clientBase'
import { defineStore } from 'pinia'

/**
 * 定义状态管理
 * 状态管理id为applicationConfiguration
 */
export const useApplicationConfigurationStore = defineStore('applicationConfiguration', {
  state: () => {
    return {
      applicationConfiguration: {} as ApplicationConfigurationDto
    }
  },
  getters: {
    auth: (state) => state.applicationConfiguration.auth,
    currentTenant: (state) => state.applicationConfiguration.currentTenant,
    currentUser: (state) => state.applicationConfiguration.currentUser,
    localization: (state) => state.applicationConfiguration.localization,
    // 获取本地语言
    l: (state) => (key: string) => {
      const localization = state.applicationConfiguration.localization

      if (localization?.values && localization?.defaultResourceName) {
        return localization?.values[localization?.defaultResourceName][key]
      }

      return key
    }
  },
  actions: {
    /**
     * 初始化应用程序配置
     */
    initApplicationConfiguration (): Promise<ApplicationConfigurationDto> {
      if (this.applicationConfiguration.timing) {
        return Promise.resolve(this.applicationConfiguration)
      }

      const client = new AbpClient(new IConfig())

      return client.applicationConfiguration()
        .then(result => {
          this.applicationConfiguration = result

          return Promise.resolve(this.applicationConfiguration)
        })
    },
    /**
     * 重置应用程序配置
     */
    resetApplicationConfiguration () : Promise<ApplicationConfigurationDto> {
      this.applicationConfiguration.timing = undefined
      return this.initApplicationConfiguration()
    }
  }
})

从以上代码可以看出piniavuex更简洁方便,且pinia是完全支持ts的

App.vue中初始化应用程序配置

App.vue文件中添加以下代码

import { useApplicationConfigurationStore } from '@/stores/ApplicationConfiguration'  // 导入应用程序配置状态管理
  mounted () {
    // const myStore = useStore()
    // myStore.dispatch('ConfigurationModule/initApplicationConfiguration')
    const store = useApplicationConfigurationStore()
    store.initApplicationConfiguration()
  }

AboutView.vue中使用本地化

AboutView.vue中添加以下代码

import { useApplicationConfigurationStore } from '@/stores/ApplicationConfiguration'  // 导入应用程序配置状态管理

添加函数计算属性

  computed: {
    // ...mapGetters({
    //   l: 'ConfigurationModule/l'
    // })
    l () {
      return (key: string) => {
        const store = useApplicationConfigurationStore()
        return store.l(key)
      }
    }
  }
    <div>
      {{ l('LongWelcomeMessage') }}
    </div>

修改LanguageSelect.vue以实现语言切换

LanguageSelect.vue文件中添加以下代码

import { useApplicationConfigurationStore } from '@/stores/ApplicationConfiguration'  // 导入应用程序配置状态管理

用以下代码替代原有对应代码

  data () {
    return {
      data: this.value
    }
  },
  emits: ['onchange'],
  computed: {
    store () {
      return useApplicationConfigurationStore()
    },
    currentCulture () {
      return this.store.localization?.currentCulture
    },
    options () {
      return this.store.localization?.languages || new Array<LanguageInfo>()
    },
    isSelected () {
      return (item: LanguageInfo) => {
        return item.cultureName === this.currentCulture?.cultureName
      }
    }
  },
  methods: {
    change (event: any) {
      this.data = event.target.value
      this.$cookies.set(IConfig.acceptLanguageKey, this.data)
      this.store.resetApplicationConfiguration()
      this.$emit('onchange', this.data)
    }
  }

如此就完成了使用Pinia替代vuex实现Vue项目全球化

Piniavuex对ts的支持更好,而且代码清晰简洁,调用也更方便。

标签:return,04,localization,state,Pinia,import,applicationConfiguration,Vuex,store
From: https://www.cnblogs.com/shipengfei/p/17020168.html

相关文章

  • 最完美WIN10_Pro_22H2.19045.2364软件选装纯净版VIP38.3
    [系统简介】=============================================================1.本次更新母盘来WIN10_Pro_22H2.19045.2364。进一步优化调整。2.不支持更新,更新后精简版更新......
  • 我的收藏周刊 040
    文章分享公共DNS服务器IP地址比较全的公共DNS服务器IP地址UnderstandinghowFacebookdisappearedfromtheInternetUnderstandinghowFacebookdisapp......
  • 力扣104 求二叉树的最大深度
    力扣104求二叉树的最大深度题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点。示......
  • 力扣1047 删除字符串中的所有相邻重复项
    题目:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在S上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操......
  • Codeforces 204 A. Pride 做题记录
    原题链接:https://codeforces.com/problemset/problem/204/A一开始还很若智地宕机了一下,想清楚了就很明白。很显然在不考虑首尾的情况下,题目要求的数字会以$10$为......
  • OneStack:Ubuntu 12.04 (或11.10) 一键安装部署OpenStack云计算平台
     OneStack:在Ubuntu12.04(precise)上一键安装部署OpentackEssex提醒:如果你喜欢折腾,喜欢自己一步一步安装各个功能组件和配置conf文件,你可以略过此文。本文工具可以在裸机和虚......
  • [20210429更新]软件方法(下)分析和设计 第8章 连载
    墙上挂了根长藤,长藤上面挂铜铃《长藤挂铜铃》;词:元庸,曲:梅翁(姚敏),唱:逸敏,1959您在阅读《软件方法》时如果发现错误,欢迎通过微信umlchina2告知。如果作者认为有道理,决定在下一次......
  • 联想小新+Windows10+Ubuntu18.04双系统安装+引导设置过程全记录
    写在前面双系统安装配置主要过程引导设置主要参考Ubuntu卸载需要的工具具体步骤情况一情况二主要参考后记2020.5.29更新关于卸载关于主题的配置写在前面又是折腾的一天,双系......
  • 04.关于线程你必须知道的8个问题(下)
    今天我们来学习线程中最后4个问题:线程的同步与互斥线程的本质与调度死锁的产生与解决多线程的是与非通过本篇文章,你可以了解到计算机中经典的同步机制--管程,Java线......
  • Allure04-用例优先级与链接
    用例优先级@allure.severity(用例优先级)表示测试用例的重要级别或错误的严重程度BLOCKER:中断缺陷,如客服端程序无响应,无法执行下一步骤CRITICAL:严重缺陷,如功能点缺......