您现在的位置是:首页 >学无止境 >Vue学习记录网站首页学无止境
Vue学习记录
目录
基础概念
前后端分离 :核心思想是前端页面通过 ajax 调用后端的 restuful api 进行数据交互
单页面应用(single page web application,SPA):就是只有一张页面,并在用户与应用程序交互时动态更新该页面的 Web 应用程序
HTML:页面,定义了网页的内容 HTML 教程 | 菜鸟教程
JS: 控制了网页的行为的编程语言 JavaScript 教程 | 菜鸟教程
TS:可以简单理解为有类型的js,最近挺火 TypeScript 中文手册 - TypeScript 中文手册
CSS:样式,描述了网页的布局 CSS 教程 | 菜鸟教程
ps:这么多?怎么学的完?简单看下知道基础就行了,毕竟谁会手写呢?大概2-3天的学习即可开发项目
vue只有一个html,整个项目只有这一个 html 文件,所以vue是一个单页面应用,当我们打开这个应用,表面上可以有很多页面,实际上它们都只不过在一个 div
VUE
vue官网:Vue.js - 渐进式 JavaScript 框架 | Vue.js
了解vue-vue脚手架vue-cli
Vue 脚手架是 Vue 官方提供的标准化开发工具/平台,有命令行 / 界面的两种操作方式,ps:我还是习惯用idea
vue-cli 安装 :npm install -g @vue/cli ,需要提前安装node
创建项目:vue create vuedemo ,可以上下滑动选择参数
启动项目:npm run serve
项目结构:
脚手架结构, render函数,vue.config.js,package.json,vue.js和vue.runtime.xxx.js的区别,有兴趣在了解下就可以
有个package.json 需要注意下,这个类型maven的pom.xml,你在项目里安装插件会自动在package.json引入,也可以在package.json里面引入插件,然后右键运行run install
webpack 是以 webpack 为模板指生成项目,webpack是一个现代的JavaScript应用的静态模块打包工具。在package.json引入相应的webpack的包也可正常使用,vue3都在用vite?
VUE语法
初识VUE
VUE指令
指令的作用是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM
v-bind缩写为:,主要是动态绑定属性 ,我理解类似于我们在data()里面要定义一个imgUrl变量,然后这个图片链接就可以用变量了,写死对代码不友好
v-on缩写为@,用于监听 DOM 事件,比如说点击
v-once,只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过(h5、微信小程序均不支持,不知道是啥玩意)
v-html,内容按普通 HTML 插入 - 不会作为 Vue 模板进行编译,微信小程序会被转为 rich-text,其实也是赋值,但是这个变量的字符串会被当做html插入
v-if,v-else,v-else-if ,就是if else,他指定了条件为true才渲染,否则不渲染,渲染多个元素,可以用的组合方式
v-show,和v-if区别?
还可以用v-bind + Class 与 Style的方式, Class 与 Style主要是一些样式,比如颜色大小,然后把样式封装成类或者方法去调用,一次还可以调用多个(通过数组的形式),这俩有啥区别?
列表渲染用v-for,可以实现基于一个数组来渲染一个列表,用法和java的循环差不多,并且可以拿到 value下表(h5从1开始,其他平台从0),name类似key,value值
组件
VUE用了很多组件,组件就是把js或者view封装起来通用化,我把它理解为 java 的工具类或者 jar 包
比如导航栏通用封装成一个组件(工具类),elementui封装了很多样式和方法(jar包)
然后你就可以在其他view脚本调用该组件,且是可以用 props 实现传参
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>组件的嵌套</title>
<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<div id="root">
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false
//定义student组件
const student = Vue.extend({
template: `
<div>
<h2>学生名称:{{ name }}</h2>
<h2>学生年龄:{{ age }}</h2>
</div>
`,
data() {
return {
name: 'JOJO',
age: 20
}
}
})
//定义school组件
const school = Vue.extend({
template: `
<div>
<h2>学校名称:{{ name }}</h2>
<h2>学校地址:{{ address }}</h2>
<student></student>
</div>
`,
components: {
student
},
data() {
return {
name: '尚硅谷',
address: '北京'
}
}
})
//定义hello组件
const hello = Vue.extend({
template: `
<h1>{{ msg }}</h1>
`,
data() {
return {
msg: "欢迎学习尚硅谷Vue教程!"
}
}
})
//定义app组件
const app = Vue.extend({
template: `
<div>
<hello></hello>
<school></school>
</div>
`,
components: {
school,
hello
}
})
//创建vm
new Vue({
template: `
<app></app>
`,
el: '#root',
components: {
app
}
})
</script>
</html>
语法
ref:用来给元素或子组件注册引用信息(id的替代者),应用在html标签上获取的是真实DOM元素,应用在组件标签上获取的是组件实例对象(vc)
<button @click="show" ref="btn1">点我输出ref</button>
console.log(this.$refs.btn1)
props声明:就好像接口的参数,我在组件里定义好参数变量,使用时可以传参方式修改变量
使用v-model时要切记:v-model绑定的值不能是props传过来的值,因为props是不可以修改的
props传过来的若是对象类型的值,修改对象中的属性时Vue不会报错,但不推荐这样做
mixin混入:把多个组件共用的配置提取成一个混入对象,组件和混入对象含有同名选项时,这些选项将以恰当的方式进行“合并”,在发生冲突时以组件优先
plugin插件:用于增强Vue,包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据,比如vuex就是插件,了解即可,后面很多插件都是封装好的
scoped样式:让样式在局部生效,防止冲突,一般不用再APP.vue里
<template>
<div class="scopeddemo">
<h2>学生姓名:{{ name }}</h2>
</div>
</template>
<style scoped>
.scopeddemo {
background-color: chartreuse;
}
</style>
WebStorage:我理解是js的缓存,或者说通过函数操作java对象的那种感觉
- 存储内容大小一般支持5MB左右
- 浏览器端通过Window.sessionStorage和Window.localStorage属性来实现本地存储机制
- SessionStorage窗口关闭消失,localStorage需手动清除
<script>
let person = {name:"JOJO",age:20}
function saveDate(){
localStorage.setItem('msg','localStorage')
localStorage.setItem('person',JSON.stringify(person))
}
function readDate(){
console.log(localStorage.getItem('msg'))
const person = localStorage.getItem('person')
console.log(JSON.parse(person))
}
function deleteDate(){
localStorage.removeItem('msg')
localStorage.removeItem('person')
}
function deleteAllDate(){
localStorage.clear()
}
</script>
自定义事件:待学习
全局事件总线:一种组件间通信的方式,适用于任意组件间通信
核心插件
axios
全局反向代理,有axios和vue-resource(不维护了)两个库,先安装 npm install axios
主要是封装了 XMLHttpRequests / ajax 的 HTTP 库,用来像后端发请求
--直接在main.js添加代理,或者复杂规范点就新建一个config.js统一配置
import axios from 'axios'
axios.defaults.baseURL = 'http://localhost:8081/api'
Vue.prototype.$axios = axios
--可以有多个配置,之后可在其他组件中通过 this.$axios 发送数据
--可以在</script>里面写按钮触发调用了
methods: {
login () {
this.$axios
.post('/login', {
username: this.loginForm.username,
password: this.loginForm.password
})
.then(successResponse => {
if (successResponse.data.code === 200) {
this.$router.replace({path: '/'})
}
})
.catch(failResponse => {
})
}
}
插槽slot:一种组件间通信的方式,主要作用是让父组件可以向子组件指定位置插入html结构
有默认插槽、具名插槽、作用域插槽3种分类
Vuex
Vuex是什么
- 管理共享状态,专门在 Vue 中实现集中式状态(数据)管理的一个 Vue 插件,对 vue 应用中多个组件的共享状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信,npm i vuex
什么时候使用Vuex
- 多个组件依赖于同一状态
- 来自不同组件的行为需要变更同一状态
Vuex的基本使用:
- 初始化数据state,配置actions、mutations,操作文件store.js
- 组件中读取vuex中的数据:$store.state.sum
- 组件中修改vuex中的数据:$store.dispatch('action中的方法名',数据) 或 $store.commit('mutations中的方法名',数据)
--大致流程就这样,有很多用法,初学现在了解即可
const personAbout = {
namespaced: true,//开启命名空间
state: {...},
mutations: {...},
actions: {...}
}
const store = new Vuex.Store({
modules: {
countAbout,
personAbout
}
})
Vue Router路由管理器
什么东西?:简单理解就是来实现页面跳转的
安装vue-router,命令:npm i vue-router,应用插件:Vue.use(VueRouter)
什么是路由:就是一个kv的映射关系,k是路径,v是function 或 componen
分类:
- 后端路由:对应一个func,服务器接收到一个请求时,根据请求路径找到匹配的函数来处理请求,返回响应数据
- 前端路由:value 是 component,用于展示页面内容,当浏览器的路径改变时,对应的组件就会显示
每个vue文件你都要在router导入注册才能访问,要不然项目找不到这个vue
//该文件专门用于创建整个应用的路由器,最基本路由如下
import VueRouter from "vue-router";
import Home from '../components/Hello'
//创建并暴露一个路由器
export default new VueRouter({
routes:[
{
path:'/',
nsmr:'Hello',
component:Hello
}
]
})
elementui
引入elementui
-- 本地运行需要先下载npm i element-ui -S
--在main.js中引入,可以完整引入和按需引入,demo项目完整引入即可,只是代码体积的影响
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)
可以去element-ui官网找到合适的样式,copy代码,有时需要稍微改造自己需要的样式
项目demo快速上手
git地址:GitHub - hht-china/vue3-ts-demo
在demo的过程中也记录了一些知识点,整体学习周期大概在3天,这么短的时间可以写一个完成的项目吗
大多时候都用的开源项目模板,从头搭建实在太费功夫,github搜多vue3 admin 找到starts较多且喜欢的风格即可