2021年的诀尘子和Vue

笔者说:如果你刷到这篇文章,那你真的巨**幸运了,赶紧收藏吧👉。
起了一个奇怪的名字,应该会很难有人刷到吧。本来想着自己过目不忘的,但是随着学的东西变多,慢慢很多都模糊了,于是就花了点时间整理了一下自己残存的笔记。。。
文章都是思维,基本没啥代码,也没写怎么做,这篇文章会慢慢增加的,所以可能巨长,建议收藏慢慢观看聂( ̄▽ ̄)*。

Vue小结

ES6小结

1.node.js遵循了CommonJS的模块化规范:

导入其他模块使用require()方法

模块对外共享成员使用module.exports对象

2.导入其他模块成员使用import关键字

向外共享模块成员使用export

3.Promise.prototype上包含一个.then()方法

通过原型链的方式访问到.then()方法

距离p.then(result=>{},error=>{})

Vue快速上手开发

基础概念

vue-router:路由方案

vuex:状态管理方案

vetur(vscode插件:提供语法高亮和智能提示)


MVVN-数据驱动视图和双向数据绑定的核心原理

View–当前页面所渲染的DOM结构

Model–当前页面渲染时所依赖的数据源

ViewModel–vue实例,MVVN的核心


{{}}语法

用于插值

<p>{{username}}</p>
属性绑定指令v-bind

简写形式:“:”

事件绑定指令v-on

v-on:click,v-on:input,v-on:keyup

监听键盘:@keyup.enter,@keyup.esc

简写形式:“@”

双向绑定指令v-model(表单)

常用:v-model.number(输入值转数值),v-model.trim(自动过滤首位空白字符),v-model.lazy(change时更新,而非input时更新)

条件渲染指令

用于div的显示与隐藏:v-if(可以与v-else配合使用),v-show(适合频繁切换)

这里如果在echarts这种用这两个东西,需要重新渲染页面,要不就不显示了。

列表渲染指令v-for
<li v-for="item in list" :key="content.id">{{item.content}}</li>
<li v-for="(item,index) in list" :key="content.id">{{index}}{{item.content}}</li>

Vue初级概念

Vue组件组成介绍

template–组件的模板结构

script–组件的JavaScript行为

style–组件样式

data():vue组件渲染期间需要用到的数据

组件的注册

组件注册分为全局注册和局部注册

想组件化开发就去研究下

全局注册是在main.js里面注册

app.component("a",A)

局部注册就是在组件内component里声明

Vue组件间的数据流动

组件之间的关系

1.父子关系

2.兄弟关系

3.后代关系

父组件向子组件共享数据据v-bind
//父组件
<my-component  :msg="msg"></my-component>

data(){
return{
msg:"hello world"
}
}
//子组件
export default{
 props:['msg'] //接收
}
子组件向父组件共享数据

方法:使用自定义事件。过程略过了。

兄弟组件之间的数据共享

插件EventBus

后代关系组件数据共享

使用provide和inject。需要的话百度。

Vue组件高级知识

ref

作用:在不依赖jQuery的情况下,获取DOM实例

比如

this.$refs.input.focus()  //获取焦点
this.$nextTick(cb)方法

等组件DOM异步重新渲染完成后,再执行cb回调函数。保证了在这中间的方法,操作一定是最新的DOM元素。(一般用于重新渲染页面,比如echarts只再开始的时候渲染一次)

Slot插槽

理解:在封装组件时,把不确定的,希望由用户指定的部分定义为插槽。

补充:可以把他当作组件封装期间,为用户预留的内容占位符

具名插槽–就是带name的插槽

v-slot缩写:”#“

使用方法:使用slot占位

<slot name="asd"></slot>
<template v-slot:asd>这里的内容就到插槽那里去了</template>
作用域插槽

建议看官网,太抽象了。。写还费劲

自定义指令(挺好玩的,但是估计用不到了)
//定义过程directives:{    focus:{  //自定义指令名        mounted(el){            el.focus()        }    }}

使用:

<input v-focus /> <!-- V+指令名就行-->

Vue路由

快速上手

方法一:

<router-link to="/shift">相当于A标签</router-link>//传参<router-link to="{name='home',params:{id:1}}">相当于A标签</router-link>

方法二:

this.$router.push('hash地址')

方法三:

this.$router.go(数值n)  //实现导航历史的前进后退

Vue全局,组件与组件之间传值–全局事件总线

功能:任意组件间通信

安装全局总线

//在main.js文件中

//创建vm
new Vue({
    el:'#app',
    render:h => h(App),
    beforeCreate(){
        Vue.prototype.$bus = this //安装全局事件总线
        //挂在了vue的原型上
    }
})

这里的$bus其实是一个傀儡。

傀儡可以挂在在vc上,也可以像这种挂在vm上,但是挂在vm上最标准。

挂载之后,全局就都可以看到他了。

挂在在vc上的写法如下:

const Demo = Vue.extend({});  //这里创建了一个傀儡组件
const d = new Demo();
Vue.prototype.$bus = d;

接收数据组件回调

//这里用了vue的自定义事件
this.$bus.$on('eventName',(data)=>{
    console.log('接收到的数据:',data)
})

"发射"数据

//写在methods里面哈
this.$bus.$emit('eventName',666)

//说明:这里用到了$emit,我们称他为发射!主要用于,子组件向夫组件传等,就是下向上传
//触发的方式就是触发这个eventName的自定义事件

总结

在使用这种方式的时候,还有其他注意事项

第一个:就是vue生命周期的运用,在vm上写beforeCreate这个生命周期,向vm原型中加一个事件总线

第二个:使用完要使用vue生命周期的beforeDestroy中解绑自定义事件

this.$bus.$off('eventName');
//必须!必须指定自定义事件的名字

Vue配置代理

配置代理是为了什么:解决浏览器不支持跨域请求!


fetch致命的问题

1.他会把返回值包两层promise

2.兼容问题,IE浏览器一个都发不出去

Vue推荐axios发送请求,axios也是对xhr进行封装。

axios请求

axios.get('地址').then(     //返回来的是一个promise值
   response => {
       console.log('请求成功了',response.data)
   },
   error =>{
       console.log('请求失败了',error。message)
   }
)

解决跨域问题

1.cors解决(响应头)

2.jsonp

3.开发中常用—配置代理服务器

零散知识点:代理服务器最厉害的地方就是,跟你所处的位置是一样的。(始终保持一致)

零散知识点:服务器和服务器之间传数据,不使用ajax。


配置代理的方式一

1.nginx反向开启代理服务器(了解后端之后回来再学)

2.借助Vue-cli开启代理服务器(缺陷:不灵活,不能控制是否走代理)

//再vue.config.js文件中写
//开启代理服务器
devServer:{
    //只写到端口号,不能继续往下写了
    proxy:'http://localhost:5000'
}

当请求的资源8080本身就有的时候,就不会把请求转发给5000。

public文件夹里面有的东西,都是属于8080直接有的。

优点:配置简单

缺点:只能配置一个代理


配置代理的方式二

同样在vue.config.js文件中去写

devServer:{
    proxy:{
      '/api':{   //'/api'叫做请求前缀  ,如果请求前缀的/api就走代理,否则就不走代理
          target:'<url>',
          pathRewrite{'^/api':''},
         // ws:true,   //websocket用于支持websocket
         // changeOrigin:true   //不写默认也为true,用于控制请求中的host值
      },
      '/foo':{
          target:'<other_url>'
      }
    }
}

了解:vue-resource

常用于vue-1.0(过气插件)


Vue插槽

为什么插槽用template(其实是代替了div)

节约了一层结构。


因为slot写法已经被弃用了。

新写法:v-slot:footer(具名插槽)

重点:v-slot只能卸载template上


作用域插槽:

感觉:数据逆向流动

如果想拿到作用域插槽传递的数据,就必须使用template

<template scope="mName">   //这里也可以写成scope={games} 或者 slot-scope="{games}"
  {{mName.games}}
</template>

//组件插槽
<slot :games="games"></slot>

因为games是一个变量所以需要":"绑定
如果只是传递一个字符串,则不需要绑定。


Vuex–集中式状态管理插件

因为Vuex是一个插件,所以使用也一定是vue.use(vuex);

也是一种组件间通信的方式,而且适用于任何组件。


什么时候使用Vuex?

1.多个组件依赖于同一状态

2.来自不同组件的行为需要变更同一状态

关键词:其实就是共享


Vue 编程式路由导航

目的;不写router-link实现跳转

router-link主要可以做tab导航,也可以传参–(query和params)

路由只是一个规则!

路由器是vue-router的实例

this.$router,push({
  name:'dd',
  query:{
     ...
   }
})  //指定路由name
this.$router.forward //前进
this.$router.back //后退
this.$router.go()  //需要传入一个数字,传入一个3,连续进3次,传一个-2,连续退两步

缓存路由组件

作用:让不展示的路由保持挂载,不被销毁。

<keep-alive>
    <router-view></router-view>
</keep-alive>

keep-alive代表缓存出现在标签内的所有组件。

<keep-alive include="ConpontentName">
    <router-view></router-view>
</keep-alive>

代表只缓存ConpontentName组件。

<keep-alive :include="["ConpontentName","News"]">
    <router-view></router-view>
</keep-alive>

两个新的生命周期

激活:

activated(){

}

不被激活:

deactivated(){

}

以上两个生命周期与keep-alive缓存挂钩

其实nextTick也是一个生命周期钩子

这三个生命周期是未在生命周期图里面体现的生命周期。

Vue 路由守卫

意义:保护路由的安全(权限)。

//在每一次路由切换之前被调用+初始化被调用
//全局前置路由守卫
router.beforeEach((to,from,next)=>{
    if(to.path === '/home/mews' || to.path === '/home/messages'){
        if(localStorage.getItem('school') === 'mPath'){
        next();  //放行
           }
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值