课程名称: 2022持续升级 Vue3 从入门到实战 掌握完整知识体系
课程章节: 项目开发配套工具讲解
主讲老师: Dell
今天学习的内容包括:
组件:根组件在实例里面写,子组件在实际例外面通过components创建。
组件具备复用性;
组件分为:全局组件和局部组
全局数据,有一套机制流程更改数据步骤:
1.必须派发一个action;this .$store.dispatch(‘change’);
2.store感知到你触发了一个change 的action ,执行change
3.提交一个commit,触发一个mutation
4.对应的mutation被执行
5.在mutation 里修改数据
mutation 里只允许写同步代码, 不允许写异步代码 ,在actions里可以写异步代码
dispatch 和actions做关联,commit 和mutations做关联
前端工程化是把软件工程相关的方法和思想应用到前端开发中
<router-link/>
路由跳转<router-view/>
展示对应的路由界面
两者搭配使用
创建项目:
cd Desktop 切换到桌面目录
vue create 文件名
选择Manually select features 人工选择 之后选择你需要的东西
再选择你的vue版本
Pick a linter / formatter config: (Use arrow keys):ESLint with error prevention only
Pick additional lint features:Lint on save
Where do you prefer placing config for Babel, ESLint, etc.?:In dedicated config files放到单独文件中
Save this as a preset for future projects?:N
启动项目:
cd 文件名(这一步是找到文件所在位置)
npm run serve 启动
如果不希望通过命令行启动该项目,ctrl+c连按两次即可,将该项目拖到vscode中就可以通过vscode进行管理,启动同样也是 npm run serve
npm install -g @vue/cli 安装脚手架工具
npm install -g @vue/cli@4.5.9 安装某版本
npm uninstall vue-cli -g 删除旧的脚手架
安装国内镜像:
node -v
npm-v
npm install nrm -g nrm 安装
nrm ls 查看国内镜像源
nrm use taobao
组件传值的基本逻辑就是说,父组件向子组件传值,然后子组件接收这个值,再渲染值template模板里,这个基本逻辑要搞清楚
app是一个根组件,你其它所有子组件其实都嵌套在里面,原因在于,main.js这个文件其实就是创建一个vue实例,这个实例就是app.vue这个根组件,然后在将其渲染至app这个dom节点里面
工程文件源代码在src中
main.js是入口
App.vue 写的是vue代码,描述一个组件
<script> import Hello World from './componentes/HelloWorld.vue' export default { name:'App', compnents:{ HelloWorld }, } </script>
name:表示这个组件的名字,App为根实例。
compoents:{HelloWorld}局部组件,这个局部组件来自于import …components文件夹下的HelloWorld.vue文件。
HelloWorld.vue文件的原始逻辑为接受一个msg参数,将参数展示出来
demo练习:
import { createRouter, createWebHashHistory } from 'vue-router' import Home from '../views/Home.vue' import Login from '../views/Login.vue' const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/login', name: 'Login', component: Login }, { path: '/about', name: 'About', // 异步加载路由 component: () => import(/* webpackChunkName: "about" */ '../views/About.vue') } ] const router = createRouter({ history: createWebHashHistory(), routes }) export default router
Node.js最大的价值是能让前端完全把控整个UI层,不论是浏览器的还是Server端的,做到这一点,我们工作的效率能得到很大的提升。我们前端更擅长于决定数据以何种方式呈现能带给用户更好的体验,而后端则更加了解如何处理数据。在这种新的分工方式下,后端只需要提供合适的数据操作接口,前端自己就能构建漂亮的、有效率的、可用性高的接口,从而实现用户所喜欢的各种交互。
路由是指根据 url 的不同,展示不同的内容
带#为hash路由
router-link:是跳转路由的标签
router-view:负责展示当前路由对应的组件路由
<template> <div id="nav"> <!-- router-link 是跳转路由的标签--> <router-link to="/">Home</router-link>| <router-link to="/about">About</router-link> </div> <!-- router—view 负责展示当前路由对应的组件内容 --> <router-viev/> </template>
异步加载路由:用到的时候再加载,减少首页的加载,但是会造成页面跳转的时候加载较慢
component:()=> import(/*webpackChunkName:“about”*/ ‘../view/about’)
VueX:数据管理框架
VueX创建了一个全局唯一的仓库,用来存放全局的数据
全局store的定义:
import { createStore } from 'vuex' // VueX 数据管理框架 // VueX 创建了一个全局唯一的仓库,用来存放全局的数据 export default createStore({ state:{ name: 'dell' }, mutations:{ }, actions:{ }, modules:{ } })
组件的使用:计算属性comouted:{}
<script> export default { name: 'Home' , computed:{ myName(){ return this.$store.state.name; } } } </script>
vuex全局数据更改流程:
1、dispatch 方法,派发一个 action,名字叫做change
this.$store.dispatch(‘change’) // change就是action,dispatch就是派发
2、感知到 change 这个action,执行store 中 actions 下面的 change 方法
actions:{ change(){ console.log(123123); } }
3、commit 提交一个叫做change的数据改变
actions:{ change(){ this.commit(‘change’) } }
4、mutation 感知到提交的change改变,执行change方法,改变数据
mutations:{ change(){ console.log(‘mutation’) } }
5、在mutation里面修改数据
mutations:{ change(){ this.sata.name = ‘lee’ } }
mutations里面只允许写同步代码,不允许写异步代码(例如setTimeout),在actions里面写异步代码
只有mutations可以修改state里面的数据
dispatch和actions做关联
commit和mutations 做关联
commit和mutation一起,dispatch和actions一起
CompositionAPI 使用的是useStore
全局使用vuex修改数据例子:使用commit,在mutations里进行修改
<template> <div class="about"> <h1 @click="handleClick">This is an about page</h1> <h1>{{name}}</h1> </div> </template> <script> import { toRefs } from 'vue'; import { useStore } from 'vuex'; export default { name: 'Home' , setup(){ const store = useStore(); const { name } = toRefs(store.state); const handleClick=()=>{ store.commit('changeName', 'hell') } return { name, handleClick} } } </script>.
import {createStore} from 'vuex' export default createStore({ state: { name: 'dell' }, mutations: { changeName (state, str) { state.name = str; } }
异步改变数据例子:使用dispatch,与actions关联
使用 axios 发送ajax 请求时,请求写在actions里