美文网首页
vue基础内容

vue基础内容

作者: 醉青风 | 来源:发表于2021-08-06 17:34 被阅读0次

    一,基础篇

    1,指令篇  v-if , v-show , v-for  ,v-on ,v-once,自定义指令   常问问题

       (1) v-if 和 v-show  

     都能控制元素的显示和隐藏,

     v-show本质就是通过控制css中的display设置为none(切换开销比较小),v-if是动态的向DOM树内添加或者删除DOM元素(切换开销比较大),

         (2) v-if 和 v-for

     v-for 具有比 v-if 更高的优先级,所以不应该一起使用

          (3)v-for和key

    key属性可以用来提升v-for渲染的效率!key属性可以避免数据混乱的情况出现(和vue用的的diff算法有关)

          (4)v-on和v-once

    v-on事件;v-once: 只绑定一次

         (5)自定义指令 directive

     Vue.directive('focus', {el.focus() }})  全局

    directives: {  focus: {  inserted: function(el){el.focus() } }} 局部

    自定义组件里面的钩子在vue3 里面跟组件的什么周期相似  

    2,生命周期篇 

    经典八项生命周期篇 

    beforeCreate:创建前

    create:创建前完成

    beforeMount:挂载前

    mounted:挂载完成

    beforeUpdate: 更新前

    updated:更新完成

    beforeDestory:销毁前

    destroyed: 销毁完成

    后面加入的三项

    activated:被 keep-alive 缓存的组件激活时调用

    deactivated:被 keep-alive 缓存的组件停用时调用

    errorCaptured:当捕获一个来自子孙组件的错误时被调用

    3,组件篇

    (1),注册引入

    通过 import 引入

    Vue.component()全局,频繁使用的需要用

    components:{} 局部

    (2),通讯

     子组件   =》    接收值在props里面定义,向父组件提供方法(自定义方法)$emit, 调用父组件方法或值 this.$parent, 直接调用未定义的属性 $attrs

    父组件   =》 传值v-model, 接收方法v-on,直接调用 $refs.name.

    (3),插槽

      未命名插槽 <slot />  直接在里面写代码

      具名插槽     

                不传值  <slot name=“name1” />  使用  <template v- slot ="name1" > </template >  

                传值    <slot  left="123" name=“name1” />    使用  <template v- slot :name1="left" > </template >  

    (3),动态组件,name是组件名称

    < component  v-bind:is="name" />

    4,计算属性和侦听器(自行了解)

    二,vuex 篇

     原理:建的一个store仓库,与vue组件中data类似,但是是一个全局对象

    state: 存储数据

    getters: 相当于计算属性,可以把state中的数据派生到getters中处理,定义 name:(state,getters)=>{return  1}

    mutation: 同步函数, 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation,定义 name(state,n){state.count = n} 使用store.commit('name',10)

    Action: 异步函数,一般用于提交mutation中的方法,使其变成异步, 定义 name(上下文对象,products){处理方法,需要提交 commit } ,上下文对象的使用 { commit ,dispatch, getters ,rootGetters, rootState, state},使用 store.dispatch('name',10),

    上下文对象包含: commit ,dispatch, getters ,rootGetters, rootState, state

    map映射: state及getters在computed里面写, mutation和Action在methods里面写

                     引入: import{mapMutations}from'vuex'

                      两种映射: ...mapMutations(['name'])  和 ...mapMutations({add:'name'})   

    Module: 模块化,其实就是在里面分一下小组

    三,路由 篇

    1, hash 和 history 模式的区别

    hash 本质上是改变window.location的href属性,你只能改变#后面的url片段。 我们可以通过直接赋值location.hash来改变href, 但是页面不发生刷新

    history接口是HTML5新增的, history 它有五种模式改变URL而不刷新页面.

    2.路由定义

    2 路由传参

    (1)params   刷新页面参数会丢失

    传  <router-like to="user/name" /> 定义{path:user/:name''}       取   this.$route.params.name

    传    this.$router.push({ name: 'news', params: { userId: 123 }})       取   this.$route.params.userId

    (2)query     刷新页面参数不丢失

    传 his.$router.push({ path: '/news', query: { userId: 123 }});       取   this.$route.query.userId

    3, 路由守卫(其实就是监听路由状态)

    全局守卫: 

    跳转前:   router.beforeEach((to,from,next)=>{

    to: Route: 即将要进入的目标 路由对象

    from: Route: 当前导航正要离开的路由

    next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

    next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

    next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

    next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。

    next(error)导航会被终止且该错误会被传递给 router.onError() 注册过的回调

    })

    跳转后 : router.afterEach((to,from)=>{// ...})

    可以在路由配置里面添加监听,

    也可以在组件里面使用,但是名称变了: beforeRouteEnter    beforeRouteUpdate(跳到当前页面)      beforeRouteLeave

    4.方法

    router.push(url) 导航到新url,向 history栈添加一条新访问记录,等同于window.history.pushState

    router.replace(url) 导航到新url,替换 history 栈中当前记录,等同于window.history.replaceState

    router.go(n) 在 history 记录中向前或者后退多少步,类似 window.history.go(n)

    router.go(1) 在浏览器记录中前进一步,等同于 history.forward()

    router.go(-1) 后退一步记录,等同于 history.back()

    router.go(0) 刷新当前页面

    router.back() 导航回退一步,类似于router.go(-1)

    router. forward() 导航前进一步,但是不刷新前进页的表单,类似于router.go(1)

    四,存储篇

    Cookie,localstorage、sessionstorage,vuex

    Cookie: 采用键值对的方式存储( document.cookie =  键= 值; 键= 值),可以定义过期时间(document.cookie ="expires=有效期"),存储大小4k

    localstorage: 使用方法进行键值对的方式存储(getItem(键,值)),永久存储,但是可以根据方法清除, 存储大小5m

    调用setItem()方法,将对应的名字和值传递出去,可以实现数据存储

    调用getItem()方法,将名字传递出去,可以获取对应的值

    调用removeItem()方法,名称作为参数,可以删除对应的数据

    调用clear()方法,可以删除所有存储的数据

    sessionstorage:跟 localstorage 方法一样,但是是单页面回话存储,跳转页面被清除,

    vuex:相当于全局变量,刷新页面清除,想长久保持数据存在,只能使用Cookie和localstorage存储,然后再赋值回去

    五,前端优化篇

    1.图片处理

          尽量使用字体图标和SVG图标,来代替传统的PNG等格式的图片,图片压缩,图片懒加载,图片寄放其他服务器,零碎图片集成采用精灵图

    2.DOM的操作

    减少DOM的频繁操作,主要是减少DOM的重绘和回流

    3.js及css

    js及css进行代码的合并和压缩,css处理动画的性能优于js,加载顺序:将css放在body上,将js放在body下

    js避免“嵌套循环”和“死循环”,减少递归,进行js封装,减少冗余代码,

    4请求

    代码进行合并和压缩和采用精灵图来减少请求次数,接口合并较少接口调用次数

    六,前端安全篇

    1,创建一个唯一的令牌(token),对任何请求, 都检查二者是否一致,时常用于用户是否登录

    2、对于任何重要的请求都需要重新验证用户的身份;

    3.加密传输,采用特定的加密方式,进行加密解密传输

    4.检查报头中的referer参数确保请求发自正确的网站

    5,输入数据时进行数据验证,防止sql注入

    6,保存的数据尽量使用post传输,因为post传输的数据不会被保存

    相关文章

      网友评论

          本文标题:vue基础内容

          本文链接:https://www.haomeiwen.com/subject/uaybvltx.html