vue(三)vue3 + vite + pinia 全局变量

4 篇文章 0 订阅
1 篇文章 0 订阅

全局变量记录两种方式,一种原生,一种pinia 全局状态管理

版本:

"dependencies": {

    "element-plus": "^2.2.17",

    "pinia": "^2.0.22",

    "vue": "^3.2.39",

    "vue-router": "^4.1.5"

  },

  "devDependencies": {

    "@vitejs/plugin-vue": "^3.1.0",

    "fast-glob": "^3.2.12",

    "vite": "^3.1.0",

    "vite-plugin-svg-icons": "^2.0.1"

  }

如下图 

安装

npm install pinia

全局注册

import { createPinia } from 'pinia'


app.use(createPinia())

获取当前是否为小屏幕设备

import { defineStore } from 'pinia'

export const useSystemInfoStore = defineStore({
    /** id 是必填的,并且所有 Store 中唯一。因为Pinia会将它在devtools显示 */
    id: 'systemInfoStore',
    state: () => ({
        mobile: false,
        screenWidth: document.body.clientWidth
    }),
    /** computed 修饰一些值 */
    getters: {
        /** 获取当前是否为小设备 */
        isSmallDevice: (state) => {
            if (state.mobile || state.screenWidth < 768) return true
            return false
        }
    },
    /** methods 可以做同步 异步都可以 提交state */
    actions: {
        modifyDevice() {
            const moblie = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)
            this.mobile = moblie ? true : false
            this.screenWidth = document.body.clientWidth
        }
    }
})

更改全局变量

<script setup>
    import { onMounted } from 'vue'
    import { useSystemInfoStore } from './components/system-info.js'
    onMounted(() => {
        window.onresize = () => {
            return (() => {
                useSystemInfoStore().modifyDevice()
            })()
        }
    })
</script>

其他页面使用

<template>
    <div>{{nowTime}}</div>{{samllScreen.samllDevice}}
</template>
<script>
//方法一
import {storeToRefs} from 'pinia'
import { useSystemInfoStore } from '../components/system-info.js'
export default {
    name: 'menu_layout',
    data() {
        return {
            samllScreen: {
                samllDevice: false
            }
        }
    },
    created() {
        const useSystemInfo = useSystemInfoStore()
        const {mobile, screenWidth, isSmallDevice} = storeToRefs(useSystemInfo)
        this.samllScreen.samllDevice = isSmallDevice
    },
}
</script>

<script>
//方法二 然后直接 this.isSmallDevice  支持响应式的
import { useSystemInfoStore } from '../components/system-info.js'
export default {
    name: 'menu_layout',
    data() {
        return {
            samllScreen: ''
        }
    },
    computed: {
        /** 建议使用 mapState 用以显示声明;不想声明也可以使用mapStores */
        ...mapState(useSystemInfoStore, ['isSmallDevice']),
    },
}
</script>

<script setup>
//方法三 类似下方使用方式
import { storeToRefs } from 'pinia'
import { useLangStore } from '../../store/lang/lang_store.js'
const useLang = useLangStore()
const { langs } = storeToRefs(useLang)
const lang = langs
</script>


其他全局变量的方法:

// 基本逻辑如下
// main.js
app.config.globalProperties.msg = 'hello'

/** 子页面使用 */
import { getCurrentInstance } from "vue"
console.log( getCurrentInstance()?.appContext.config.globalProperties)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于使用 Vue 3、TypeScript 和 Vite 来搭建项目,并结合 Pinia 进行状态管理,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了 Node.js 和 npm(或者使用 yarn)。 2. 创建一个新的项目文件夹,并进入该文件夹。 3. 在终端中运行以下命令来初始化一个新的 Vue 3 项目: ``` npm init vite@latest ``` 在初始化过程中,选择使用 Vue 3、TypeScript 和默认配置。 4. 进入项目文件夹并安装依赖: ``` cd <project-folder> npm install ``` 5. 接下来,安装 Pinia: ``` npm install pinia ``` 6. 在 `src` 目录下创建一个 `store` 文件夹,并在其中创建名为 `index.ts` 的文件。 7. 在 `index.ts` 中编写你的 Pinia store。例如,你可以创建一个名为 `counter` 的 store,并且在其中定义一个状态和一些操作: ```typescript import { defineStore } from 'pinia'; export const useCounterStore = defineStore('counter', { state: () => ({ count: 0, }), actions: { increment() { this.count++; }, decrement() { this.count--; }, }, }); ``` 8. 在应用的入口文件 `main.ts` 中导入并使用 Pinia: ```typescript import { createApp } from 'vue'; import { createPinia } from 'pinia'; import App from './App.vue'; const app = createApp(App); const pinia = createPinia(); app.use(pinia); app.mount('#app'); ``` 9. 在组件中使用 Pinia store。在你的 Vue 组件中,可以使用 `useStore` 函数来访问 Pinia store: ```typescript import { useCounterStore } from '../store'; export default { setup() { const counterStore = useCounterStore(); return { counterStore, }; }, }; ``` 10. 最后,你可以在组件中使用 `counterStore` 来访问状态和操作: ```vue <template> <div> <p>{{ counterStore.count }}</p> <button @click="counterStore.increment()">Increment</button> <button @click="counterStore.decrement()">Decrement</button> </div> </template> <script> import { useCounterStore } from '../store'; export default { setup() { const counterStore = useCounterStore(); return { counterStore, }; }, }; </script> ``` 这样,你就可以使用 Vue 3、TypeScript、Vite 和 Pinia 搭建一个基本的项目并进行状态管理了。希望对你有帮助!如果还有其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值