Vue 总结 --2020.3.29

Vue -- 目前前端最火的三大js开发框架之一,尤雨溪开发的个人项目。

15年在吸收了react框架和angularJS框架的一些本身特点后 研发的js 前端框架,

它包含了react里对虚拟Dome 的操作的特点和angularJs 的指令的特点。

Vue 介绍 

  vue 是遵循 mvvm 架构的js 框架 vue核心库只关注视图层,开发者只需要关注v-m 的映射关系 和逻辑的处理。

vue 指令

  v-if / v-show  :用来判断是否加载  区别  v-show 是对css样式进行切换 v-if 是真正的销毁和重建

  v-for: 可以循环数据来添加dome  实例 v-for="(item,index)  in  数据";

  v-on : 简写 @   vue中用来添加事件

  v-html: 用来编译模板语法

  v-bind:简写 : 对标签中的属性进行动态的一个绑定  实例   <div  v-bind:class="数据"></div>   里面可以做一些逻辑判断

  v-model : vue中可以数据双向绑定 v-model 本质上是语法糖

  v-solt : 提供具名插槽或需要接收 prop 的插槽

vue 计算属性、监听属性

   computed : 计算属性  当一个数据是通个几个其他数据得来的时候就 会用到 computed 计算属性

  watch : 监听属性,当进行一些响应数据变化,异步开销比较大是这个是非常合理的

vue 组件

  vue 中组件  是一个小的vue 实例 vue实例中的属性和方法 组件 身上都有,

         只是多了template 模板; 里面的data必须是一个函数,

         return 出对象数据。

        var fit = {

          data:function(){ return {  } , template:``

        }

    全局 组件 vue.component ('定义的标签名',fit)

    局部 组件 var Vm =  new Vue ({ el:'#app' , components:{ '定义的标签名': fit  }    })

  里面可以通过插槽来添加 需要的标签  vm.component('定义的标签名'{ data:{数据},template:`<div><button><button><slot></slot>(插槽)</div>` })

vue 组件中的is切换

    在实例、组件的模板中的某一个标签上,可以通过is属性来指定为另一个目标的组件,这个时候我们一般会使用component标签来占位、设置is属性来指定目标组件,

    **重新创建动态组件的行为通常是非常有用的,但是在这个案例中,我们更希望那些标签的组件实例能够被在它们第一次被创建的时候缓存下来。为了解决这个问题,我们可             以用一个  元素将其动态组件包裹起来。

    <keep-alive><compontne :is = "type"></component></keep-alive>

    data:{ type : 'but'}

    components:{

          'Nav':{<template>内容</template>}

          'tab':{<template>内容</template>}  //这个会出现

          }

结合组件用的Keep-ailve vue内置组件 

   1.当进行组件切换时不想组件进行销毁是就包裹上 <keep-alive> 它会将组件进行缓存。

   凡是被keep-alive 包裹的组件,都会多出两个生命周期activated(活跃状态),deactivated(缓存状态),

   你可以在这两个生命周期中进行一些操作

   2.属性

      include - 包含 那些组件被缓存中进行缓存  (可以是字符串也可以说是表达式)。

      exclude - 排除 哪些组件不会在缓存中缓存   (可以是字符串也可以说是表达式)。

      max - 数字。最多可以缓存多少组件实例。

 

vue 组件 之间的 传值 

    非父子:可以用事件订阅(有小问题 -- 浪费性能)

        1.子住文件mine.vue文件 中给Vue原型添加一个公共的对象 ,这个对象是一个Vue的实例,  Vue.prototype.任意值 = new Vue();

          传递在:在传递数据的组件添加自定义事件 ,通过this.任意值.$emit('自定义事件',需要传递的数据)

          接收: 在需要接收数据的组件,同过this.任意值.$on('自定义事件',一个回调函数)。

          2.手动封装事件订阅  $on  , $emit  ,$off

        3.EventBus

        4.vuex

    子传父:

        1.通过 this.$emit('事件',带的参数)

           接收:当子组件在父组件中当做标签使用的时候,给子组件添加一个自定义方法,值为需要传递的数据,函数不允许加()

           传递:在子组件内部,通过this.$emit(绑定的自定义事件,需要传递的值) 进行数据的传递

        2.插槽作用域

    父传子 :通过 prop   不可以在子组件中对props 里的数据进行修改  

        传递:当子组件在父组件当做标签时用的时候,给子组件添加一个自定义的属性 ,值为需要传递的数据,

        接收:在子组件内通过props 来进行接收

           props 接收的方式有两种,一种是数组,一种是对象

           数组:['自定义属性']

           对象 : {

              type:规定传递过来的数据类型

              default:定义默认的数据,当父组件没有给子组件传递数据的时候用默认值,

              required:如果设置为true的时候则代表数据必须传递。

              }

    还有一些不推荐使用的方法

      1.$root 能够获取到根组件的实例对象

      2. $parent 获取父组件的实例对象

      3. $children 获取子组件们的实例对象集合 []     
      4. $refs 获取具体某个子组件的实例或者具体某个html元素的真实dom。(这个东西在获取具体某个html元素的时候常用。。。)
      4.1 首先需要标记。你想要获取的组件或者html元素,在他们身上定义一个 ref="xxx"
      4.2 然后 this.$refs.xxx

      如果 ref 标记的是普通html元素,那么到通过 $refs.xxx 得到的将是 这个 html元素的dom对象

      如果 ref 标记的是一个子组件。那么 通过 $refs.xxx 得到的将是这个 子组件的 实例对象
插槽   
    一般情况下当组件被当做标签使用的时候,组件标签内嵌套的元素默认是不会显示的,如过需要让其显示则需要用到插槽
    (冪名插槽)在组件标签内通过template标签进行包裹需要进行嵌套的内容,
          在组件内部通过slot 内置组件进行接收
    (命名插槽)在组件标签内部通过template标签进行包裹需要嵌套的内容,需要给template标签加一个v-slot:名字
          在组件内部通过 内置组件进行接收,命名插槽需要给slot加一个那么属性  代表需要插入的名称
    (作用域插槽) 它就是带参数的插槽 可以实现(子传父)
transition动画
    Vue 在插入,更新获移除Dom时提供不同方式的过度效果
      其中包括工具:
          在 CSS 过渡和动画中自动应用 class
          可以配合使用第三方 CSS 动画库,如 Animate.css
          在过渡钩子函数中使用 JavaScript 直接操作 DOM
          可以配合使用第三方 JavaScript 动画库,如 Velocity.js
         详情可见:https://cn.vuejs.org/v2/guide/transitions.html
可复用性混入合并
     当你有一个可复用的方法,vue组件中提供了一个可复用的功能,
     第一步:定义一个需要混入的对象, 定义一个混入对象的组件,
     第二步:当组件有同名选项时,这些选项会以恰当的方式进行合并,当数据合并发生冲突时会以组件数据优先。
vue-route : 路由
     概念: 根据用户请求的路径,返回不同的页面或数据,
     前端路由:根据当前端路由进行页面跳转的时候不会经过后端服务器,根据页面的路径来进行页面的渲染。
    前端路由原理:1.histroy.js 2.onhaschange
    第一步: 安装:cnpm install v-router
    第二步:创建一个router文件夹
    第三步:引入vue (import Vue from "vue")  引入vueRouter (import Vue Routr from "vue-router")
    第四步:通过vue.use使用(vue.use(vueRouter ) )
    第五步:引入组件 import 名字 from '路径'
    第六步:进行路由的配置
        const router = new vueRouter ({
          mode:"hash" //hash路由就是路由的路径上会有一个 #
          //路由的配置规则  一个对象就是一个路由的配置
          routes;[
               {
              path:"/路径",
             components
             },
 
            ]
        })
     第七步  :导出路由  export  default router ;
     第8步 在newVue中使用  (就是在脚手架的main.js 文件中先引入文件 然后在new Vue 中添加 使用   )
 
使用路由是需要知道的两个内置组件
     1.<router-view></router-view> //当路由匹配成功后需要渲染组件的位置    (组件渲染的占位符  与<component></component>一个意思 )
         2. <router-link></router-link>  属性  to='到哪(路径)'  需要跳转的路径    tag="标签" 需要变成什么样的标签 
        底层是通过a标签来实现的 例如<a href="路径"></a>
 
 
路由配置常用的数据
    mode:路由的一种形式
      hash路由:底层原理  onhaschange  路由会携带一个#
      history路由:  histroy.js  路径不会携带 # 但是你如果需要使用history的时候需要后端做一个配置, 否则会出现 404
      
 
 

 

 
 

  

  

posted @ 2020-03-29 22:51  休息外婆  阅读(356)  评论(0)    收藏  举报