Vue.js开发印象云笔记

119 阅读3分钟

复习

以下是默认值的基本写法

let [a=2,b=3]=[undefined,null]
这个undefined是不存在,null则是值为空
a//2
b//null
let {name,age}={name:'xxx',age:18}
name//'xxx'
age//18
function add([a,b]=[1,2]){
return a+b
add()//3

function sun({x,y}={x:0,y:0},{a=1,b=1}){
return [x+a,y+b]
}
sum({x:1,y:2},{a:2})//[3,3]
function max(arr){
return Math.max(...arr)}
max([1,3,5,2])//5
let ps =document.querySelectorAll('p')
Array.from(ps).forEach(p=>{console.log(p.innerText)})
等价于 //扩展运算符可以转换成数组
[...ps].forEach(p+>{console.log(p.innerText)})
function sayHi(name='xxx'){
console.log('hi,${name}')
}
sayHi()//调用undefined 执行默认值xxx
sayHi('jack')//hi,jack
function m1({x=0,y=0}={}){
return [x,y]
}
function me({x,y}={x:0,y:0}){
return [x,y]
}
//函数没有参数时
m1()//[0,0]
m2()//[0,0]
//x和y都有值得情况
m1({x:3,y:8})//[3,8]
//x有值,y无值得情况
m1({x:3})//[3,0]
m2({x:3})//[3,undefind]
//x,y都没有值
m1({})//[0,0]
m2({})//[undefind,undefind]

class

class preson{
constructor(name,age){
this.name=name
this.age=age
}
}
sayHi(){
console.log('hi我是',${this.name},'我今年'${this.age})
}

写css

被选中的router-link的颜色
.icons .router-link-active {
  background-color: #5e6266;
}
 input:focus {
        border: 3px solid #9dcaf8;
      }
type='password'能给input加一个隐藏密码的小眼睛
<input type="password" placeholder="密码">
正则表达式

表达创建账号时输入的用户名范围,和3-15个字符

用户名:
 if (!/^[\w\u4e00-\u9fa5]{3,15}$/.test(this.login.username))
密码:
 if (!/^.{6,16}$/.test(this.login.password)) 

18510468962

@keyup.enter

用户输入完密码可能会回车,input上监听一个@keyup.enter键盘事件,执行的函数与点击注册或登录时的检查账号密码一致

baseURL

这东西是多个URL的公共前缀,封装一个request的函数,接受三个(url,POST,data={}),提前声明这个baseUrL的好处就不用了每次在调用函数是都写出网址的前缀了, axios.defaults.withCredentials=true;axios提供跨域默认false,但我没有数据库,所以用的公用的就算跨域。每次刷新没有cookie,会被注销掉
在写代码时,通常会遇到后端还没有创建好的情况,这时候可以设置一个是在开发环境,生产环境引用不同的网站来模拟数据库,生成一个文件,这个文件会在不同环境下展示不同的网址。

catch

抓住,.then后执行一个函数,如果发生错误,用.catch抓住错误

router

可以填入跳转路径 image.png
replace和push的区别就是,replace在跳转之前不会把当前的路由路径记录到history,在replace跳转以后,再点击后退会回到更前面的一个路由页面。

钩子

created()时候会加载数据,但并不会渲染到页面,要想让axios加载最快可以将数据请求放到这个钩子,this.$nextTick(()=>{}),这个函数在created后执行,可以在Dom没有出现在页面时获取后端数据

replace()

方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。':id',notebookId将id替换成notebookId

request

一般接受url,methods(GET,POST...),data 我理解的是向后端发起请求,请求的路径要做什么,例如GET得到,POST发送,DELETE删除等,和数据。可以用 return new Promise(resolve, reject)来得到返回的成功或失败而且可以跟.then的链式调用,比如调整数据时间。

sort

notebook1和notebook2分别是过去的时间和现在的时间,他们都是个对象字符串,但可以用来做比较,用sort来调整数据顺序

res.data.sort((notebook1, notebook2) =>
   notebook1.createAt < notebook2.createAt ? 1 : -1);
      resolve(res)

时间公式

image.png

image.png 在notebook这个数据里加一个对象,这个对象是展示截止今天的时间,这样可以在外部展示时直接用

element-ui

Element - 网站快速成型工具各种小工能插件

v-show与v-if的区别

v-show 理解为是一个开关,他会被开关多次,v-if只触发一次

@input

@input事件是输入事件。在编辑笔记内容时 为了设置自动保存文字,也用到了_debounce能够节流保存,在用户输入停下来后触发

yarn add lodash
import _ from ‘lodash‘;

input的keydown

应该是一个输入事件,在用户敲键盘时显示正在输入,抬手显示已保存,提前声名一个空值改变内容

unshift()

将新项添加到数组起始位置

高度计算

height: ~"calc(100% - 70px)";

一个组件能将输入形式变成类似掘金的语言
import MarkdownIt from "markdown-it";
let md = new MarkdownIt();

Vuex

又遇到Vuex 可以理解为将数据作为全局属性,有一些必要的api需要理解:
Vuex 通过 Vue 的插件系统将 store 实例从根组件中“注入”到所有的子组件里。且子组件能通过 this.$store 访问到。
state:全局的数据,需要一开始把所有需要的数据写好,如果确实需要添加再用vue.set(objec,key,value)
Getter:理解为数据计算属性传递给子组件,类似computed;接受 state 作为其第一个参数
Mutation:子组件更改数据状态的唯一方法是提交 mutation,每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler) 。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,不接受异步!
Action 类似于 mutation,不同在于:

  • Action 提交的是 mutation,而不是直接变更状态。
  • Action 可以包含任意异步操作。
  • store.dispatch('')用来触发,类似于commit

我的理解是,Action可能是一个异步的,当他的到异步的数据后才会执行Mutation的操作 Module更大的数据仓库,能让数据分开存放,方便阅读
函数调用记得是commit('函数名')
payload:在mutation里的函数执行中,传入一个payload,这样在调用时可以再给函数传一个值=>commit('函数名称',payload)

获取数据

...Vuex.mapState([])可以将this.$store.state的数据一一映射

mapGetters 辅助函数

mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性,记得要把函数写到computed里

导航守卫

在用列表时,切换列表想更新列表数据内容会用到这个导航守卫beforeRouteUpdate(to, from, next)可以为刷新数据?
to表示去哪里,跳转到那个页面

from 表示 来自那个页面

next() 表示继续执行页面,一定要加上的

全局state

如果你希望使用全局 state 和 getter,rootState 和 rootGetters 会作为第三和第四参数传入 getter,也会通过 context 对象的属性传入 action。还是用rootgetters好一点,没有嵌套用方便一些

设置后默认选择

设置路由跳转后默认选择第一个笔记的实现:给setcurNote({})传个空,因为设置函数时写的默认选择第一个,再接一个路由跳转就可以啦。

Promise

是一个链式调用,在上一次执行完后return 再执行下一次时.then 就可以直接继续执行,避免了回调地狱

路由小总结

hash:哈希模式任何情况下都可以使用,但SEO不友好,人话:将路径存到URL的hash里,若搜索的url不正确则会去404,这种路由不向服务器发送请求网页会映射对应内容,不需要服务端的支持
history:这个路由对后端有要求,要求后端路由将前端路由全部收录到同一页面,但不能是404。人话:是需要客户端和服务端共同支持的情况下,用户发送请求给服务端,返回对应内容,所以页面刷新比较频繁,并且搜索的url不正确还会去到对应网页的首页。要做的事情有:阻止a标签刷新,获取到想要去的地方a.getAttribute("href");, 在不刷新页面的情况下变更路径window.history.pushState()
memory:就是将访问的路径存到local storage里面,读取的时候也去缓存读,刷新时页面不变因为缓存了!但是不支持将URL复制给其他人