vue pinia使用 记录

定义store
import {defineStore} from "pinia";

export const useAlarmStore = defineStore('alarm', {
    state: () => (
        {
            message: 'hello',
            content: 'content',
            detail: 'detail',
            isFirst: 0
        }
    ),
    getters: {
        getMessage() {
            return this.message + 'con' + Math.random()
        }
    },
    actions: {
        handleMessageFun() {
            this.message = Math.random() + 'hello'
            this.content = Math.random() + 'content'
        },
        handleFirstFun() {
            this.isFirst = 1
        }
    },
    persist: {
        enabled: true,
        strategies: [
            {
                key: 'alarm',   //存储了所有变量
                storage: localStorage
                // paths: ['message', 'content', 'isFirst']
            }
            // {storage: sessionStorage, paths: ['message']},
            // {storage: localStorage, paths: ['content']}
        ]
    }
})

页面使用
<script>
import detail from "@/views/componetns/detail.vue";
import {computed, onBeforeUnmount, onMounted, ref} from "vue";
import {getAlarmData} from "@/api/jiankong";
import {useAlarmStore} from '@/store/modules/alarm'
import {storeToRefs} from "pinia";

export default {
  components: {
    detail
  },
  setup(props, context) {
    const store = userAlarmStore()
    // 获取store 中的state  属性
    // console.log(store.message)
    //(1) 获取store getters
    const showMess = computed(() => store.getMessage)
    console.log(showMess)
    // 获取store 中的方法
    function changeMessage() {
      // 获取actions 定义的方法
      store.handleMessageFun()
      // console.log(store.message)
    }
    // console.log(store.getMessage())
    // (2)store 中存储的属性值直接取出来使用就不会有响应式了,所以使用storeToRefs 就会有响应式
    const {message} = storeToRefs(store)
    // 获取store 中变量的方法  可以使用1和2两种  都可以
    
    //以上是sore 使用-------------------------------------


    let res = getAlarmData()
    let tableData = res.data
    let msg = ref('')
    let showDetail = ref(false)
    function checkDetail(row) {
      showDetail.value = true
      msg.value = {...row}
    }
    function saveEmit(value) {
      console.log(value)
    }
    // function checkPoint(event) {
    //   console.log(event.pageX)
    //   console.log(event.pageY)
    // }
    // onMounted(() => {
    //   window.addEventListener('click', checkPoint)
    // })
    // onBeforeUnmount(() => {
    //   window.removeEventListener('click', checkPoint)
    // })
    return {
      tableData,
      checkDetail,
      showDetail,
      msg,
      saveEmit,
      message,
      changeMessage,
      showMess
    }
  }
}

</script>

<template>
  <div class="table-content">
    <div @click="changeMessage">
      新增{{ message }} ---------{{ showMess }}
    </div>
    <el-table
      :data="tableData"
      stripe
      border
      style="width: 100%"
      max-height="830"
    >
      <el-table-column
        prop="psName"
        label="企业名称"
        width="180"
      />
      <el-table-column
        prop="alarmRuleName"
        label="报警名称"
        width="180"
        show-overflow-tooltip
      >
        <template #default="scope">
          {{ scope.row.psName + scope.row.alarmRuleName }}
        </template>
      </el-table-column>
      <el-table-column
        prop="content"
        label="报警内容"
      />
      <el-table-column
        prop="content"
        width="90"
        label="操作"
        align="center"
      >
        <template #default="scope">
          <el-button
            text
            type="primary"
            @click="checkDetail(scope.row)"
          >
            查看
          </el-button>
        </template>
      </el-table-column>
    </el-table>
  </div>
  <detail
    v-if="showDetail"
    :msg="msg"
    @saveEmit="saveEmit"
  />
</template>

<style scoped lang="scss">
.table-content {
  margin: 15px;
  padding: 15px;
  background-color: #FFFFFF;
  border-radius: 2px;
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值