Why
(。・∀・)ノ゙,这还有啥why,混口饭吃,有个能创建网站的前置能力,已经很足够了
vue
初始工程
创建命令 npm create vue@latest
cd your_demo npm install npm run serve
|
重要文件
node_moudles 组件库 public src 主要编写文件 index.html 入口文件 pack-lock.json package.json 配置依赖等 vite.config..js 配置文件
|
computed
作用: 根据已有数据计算新数据
<template> <div class="person"> 姓: <input type="text" v-model="firstName"><br> 名: <input type="text" v-model="lastName"><br> 全名: <span>{{ fullName }}</span><br> <button @click="changeFullname">全名改为:xxx</button> </div> </template>
<script setup> import { computed, ref } from 'vue';
let firstName = ref('zhang') let lastName = ref('san')
let fullName = computed({ get(){ return firstName.value +"-"+lastName.value }, set(val){ alert("有人修改乐fullName",val) firstName.value=val.split('-')[0] lastName.value=val.split('-')[1] } })
function changeFullname(){ fullName.value="li-si" } </script>
|
!路由
害。。。速成嘛,就先重点路由吧
导航区,展示区
指定路由的具体规则
形成一个个的xxx.vue
需要提前想好路由工作模式
import { createRouter, createWebHistory } from 'vue-router'; import Home from '@/views/Home.vue' import person from '@/views/person.vue' import News from '@/views/News.vue'
const router = createRouter({ history:createWebHistory(), routes:[ { path: '/home', component: Home }, { path: '/person', component: person }, { path: '/news', component: News } ] })
export default router
|
【编程式导航】
路由组件的两个重要的属性:$route
和$router
变成了两个hooks
import {useRoute,useRouter} from 'vue-router'
const route = useRoute() const router = useRouter()
console.log(route.query) console.log(route.parmas) console.log(router.push) console.log(router.replace)
|
//news.vue <ul> <li v-for="news in newsList" :key="news.id"> <RouterLink :to="{ path: '/news/detail', query: { id: news.id, name: news.name, context: news.context, // News: news//不行 car: car } }">{{ news.name }} </RouterLink> </li> </ul>
|
<h1>新闻</h1> <ul>{{ id }}</ul> <ul>{{ name }}</ul> <ul>{{ context }}</ul> <ul>{{ car}}</ul> <hr> <ul>{{ query.id }}</ul> <ul>{{ query.name }}</ul> <ul>{{ query.context }}</ul> <ul>{{ query.car}}</ul>
<script setup> import { useRoute,useRouter } from 'vue-router' import { toRefs } from 'vue'; import {useDetailStore} from '@/store/details' import { storeToRefs } from 'pinia';
defineProps(['id','name','context','car']) ------ let route=useRoute() let router=useRouter() let {query}= toRefs(route) </script>
|
pinia
有点类似与Java的ThreadLocal?
npm install pinia
import { createApp } from 'vue' import App from './App.vue' import router from './router/index' import { createPinia } from 'pinia'
const pinia=createPinia() const app=createApp(App) app.use(router).use(pinia) .mount('#app')
|
首先是在js文件中去定义数据以及方法,还有暴露出来
import { defineStore } from "pinia"; import { ref } from "vue";
export const useDetailStore = defineStore('detials', () => { const toy = ref('atm') const todayNews = ref([ { id: 'yuysada01', content: '你今天有点怪,哪里怪?怪好看的!' }, { id: 'yuysada02', content: '草莓、蓝莓、蔓越莓,你想我了没?' }, { id: 'yuysada03', content: '心里给你留了一块地,我的死心塌地' } ]) const sum = ref(399) const change=(newToy)=>{ toy.value=newToy }
return {toy,todayNews,sum,change}
})
|
而接收的话也是有好几种的
import {useDetailStore} from '@/store/details' import { storeToRefs } from 'pinia';
const detailStore=useDetailStore()
const {toy,sum,todayNews} = storeToRefs(detailStore)
const change=(newToy)=>{ toy.value=newToy } function changeStore(){ toy.value="aiodsjfodis" detailStore.change(toy.value) }
|