1. 首页>
  2. 技术文章>
  3. vue学习第20天

vue学习第20天

12/26/23 9:02:54 AM 浏览 559 评论 0

vue

1、在<script setup>之前,如果要定义props,emits可以轻而易举地添加一个与setup平级的属性,但是用了<script setup>后,就没法这么干了 setup属性已经没有了,自然无法添加与其平级的属性。为了解决这一问题,引入了defineProps和defineEmits这两个宏,但这只解决了props和emits这两个属性。所以在vue3.3中新引入了defineOptions宏,可以用defineOptions定义任意的选项,props,emits,expose,slots除外(因为这些可以使用defineXXX来做到),demo:

<script setup>
//默认这里会提示"should always be multi-word"
defineOptions({
    name:'LoginIndex'
})
</script>
<template>
    <div>login index</div>
</template>

2、defineModel让v-model双向绑定更加的方便,test-com.vue:

<script setup>
import {defineModel} from 'vue'
const inputValue = defineModel()
console.log(inputValue)
</script>
<template>
    <input v-model="inputValue" type="text" />
</template>

App.vue:

<script setup>
import { ref} from 'vue'
import TestCom from '@/components/test-com.vue'
const inputValue = ref('this is a demo')
</script>
<template>
<div>
  <TestCom v-model="inputValue"></TestCom>
  <p>{{ inputValue }}</p>
</div>
</template>

在vite.config.js中需要加入相关代码:

plugins: [
    vue({
      script:{
        defineModel:true
      }
    }),
]

3、pinia的使用,ref()就是state,computed()就是getters,function()就是actions,counter.js:

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'
export const useCounterStore = defineStore('counter', () => {
  const count = ref(8)
  const doubleCount = computed(() => count.value * 2)
  const subCount = () => count.value --
  function addCount() {
    count.value++
  }
  return { count, doubleCount, addCount,subCount }
})

App.vue:

<script setup>
import {useCounterStore} from '@/stores/counter.js'
import TestCom from '@/components/test-com.vue'
const counterStore = useCounterStore()
console.log(counterStore)
</script>
<template>
<div>
 count: {{ counterStore.count }}
 <button @click="counterStore.addCount">加</button>
 <button @click="counterStore.subCount">减</button>
 <TestCom></TestCom>
</div>
</template>

4、pinia demo,channel.js

import { defineStore } from 'pinia'
import axios from 'axios'
export const useChannelStore = defineStore('channel', () => {
  //声明操作数据的方法
  const getList = async () =>{
    const {data:{data}} = await axios.get('url')
    console.log(data);
  }
  return { getList }
})

App.vue:

<script setup>
import {useChannelStore} from '@/stores/channel.js'
import { onMounted } from 'vue';
const channelStore = useChannelStore()
console.log(channelStore)
onMounted(() => {channelStore.getList()})
</script>



网友讨论