vue零散知识总结

vue零散知识总结

VUE实例中挂载vue文件的标签结构方式:
  • 写法
    • el:"#app"
    • .$mount("#app")
    • .mount("#app")
  • 区别:没有实质性区别,el是直接挂载读取渲染,$mount是手动挂载
什么时候叫方法,什么时候叫函数
  • 方法:在类里面一般叫方法,方法与实例对象挂钩
  • 函数:function 函数名(){} 一般直接写的叫函数
vue-cli中的代码规范
  • .editconfig文件中规定代码规范

    [*.{js,jsx,ts,tsx,vue}]
    indent_style = space
    indent_size = 2
    trim_trailing_whitespace = true
    insert_final_newline = true
    
冷门指令
  • v-once 只执行一次

  • v-cloak(斗篷) 闪动效果

    <div v-cloak>
      {{ message }}
    </div>
    <style>
    [v-cloak] {
      display: none;
    }
    </style>
    
  • v-text 显示文本

  • v-pre 跳过编译直接显示原文本

  • label中的for=“id” 属性 for属性可以把label绑定到另外一个元素。form=""属性规定label字段所属的一个或多个表单

数据双向绑定的原理
  • v-model可以实现数据的双向绑定,双向绑定的原理是

    <input type="text" v-model="message">
    {{message}}
    
    • v-bind绑定一个value属性

      <input type="text" v-bind:value="message">
      
    • v-on指令给当前元素绑定input事件

      <input type="text" v-bind:value="message" @input="message=$event.target.value">
      
ES6
  • 作用域与闭包问题
    • 变量作用域:变量在什么范围内是可用的
    • var没有块级作用域,容易形成变量污染
    • 块级作用域:函数,let
    • 闭包:闭包可已解决问题是因为函数是一个作用域,在函数被调用的时候,变量就已经确定下来,任凭外面的变量如何更改,函数中的变量值是不会变的
    • 常量含义指向对象不能修改,但可以改变对象内部的属性
  • 对象的增强写法
    //ES6写法
    const name = "hsy"
    const age = 18 
    const height = 1.88
    const obj={
        name,
        age,
        height
    }
    
  • 函数的增强写法
    // ES6写法
    const obj = {
    	run(){
    
    	}eat(){
            
        }
    }
    
  • 事件绑定参数传递问题
    • @后可以是click也可以是keyup之类的事件指令
    • 在事件定义时,写方法时省略了小括号,但是方法本身需要一个参数,这时候Vue会默认将浏览器产生的event事件对象作为参数传入到方法
    • 手动获取浏览器参数的event对象:通过$event这个参数传入
  • 事件修饰符
    • .stop 阻止事件冒泡
    • .prevent 阻止默认事件
    • .native 监听组件根元素的原生事件
    • .once 只触发一次回调
  • 高阶函数的使用
    • filter : 过滤 回到函数有一个要求:必须返回一个布尔值
      • 返回为true时,函数内部会自动将这回调的n加入到数组中
      • 返回为false时,函数内部会过滤掉这次的n
    • map : 映射
    • reduce :对数组中所有值进行汇总累加
  • Promise对象
    • 对象的状态不受外界影响。
      • pending : 初始状态
      • fulfilled : 操作完成状态
      • rejected :操作失败
    • 一旦状态改变就不会再变,任何时候都可以得到这个结果
    • 有两个参数resolve,reject
    • .then() 链式操作 第一个函数
    • .catch()
    <script>
          console.log(123)
          var myFirstPromise = new Promise(function (resolve, reject) {
            //当异步代码执行成功时,我们才会调用resolve(...), 当异步代码失败时就会调用reject(...)
            //在本例中,我们使用setTimeout(...)来模拟异步代码,实际编码时可能是XHR请求或是HTML5的一些API方法.
            // console.log(963)
            setTimeout(function () {
              resolve('成功!') //代码正常执行!
              console.log(852)
            }, 250)
          }).then(function (successMessage) {
            //successMessage的值是上面调用resolve(...)方法传入的值.
            //successMessage参数不一定非要是字符串类型,这里只是举个例子
            console.log('Yay! ' + successMessage)
            console.log(789)
          })
          console.log(456)
    </script>
    

    执行结果:123=》456=》852=》Yay! 成功!=》789

    • async await 函数

    • 程序执行先后顺序

      • 同步任务
      • process.nextTick
      • 微任务
      • 宏任务
      • setImmediate()
    • ES6模块化开发中的导入导出
      • export(导出)

        • export {}
        • export var num1 =1000
        • export function mul(参数,参数…){} // 导出函数/类
        • export default function (argument){} //默认导出
      • export导出与export default 导出的区别

        • 在一个文件模板中,export,import可以有多个,export default只能有一个
        • export 导出,导入时要加{},export default 不需要
      • import

        • import {} from “地址” //导入export中的变量函数或者类
        • import aaa from “地址” // 导入export default 模块中的内容
        • import * as 模块名 from “地址” // 统一全部导入
      • 导入方式import 和 require 的区别
        • require :复杂类型引入,运行时创建
        • import :单纯的只读引入
webpack(前端模块化静态打包工具)
  • 目录 :

    • src 源码文件目录
      • main.js 入口文件
    • dist=》distribution(发布)打包完成的文件目录存储位置
  • webpack配置文件的分离

    • 创建一个build文件夹

    • 创建三个文件分别为base.config.js/dev.config.js/prod.config.js

    • 在package.json中增加如下代码

      • "scripts": {
            "test": "echo \"Error: no test specified\" && exit 1",
            "build": "webpack --config ./build/prod.config.js",
            "dev": "webpack-dev-server --open --config ./build/dev.config.js"
          },
        
    • 作用:配置文件分离,代码更清晰,配置文件之间互不影响

vue运行过程
  • runtime-compiler
    • vm.options.template => ast (abstract syntax tree :抽象语法树) => render(functions) => virtual dom => 真实DOM => ui
  • runtime-only-----(1.性能更高 2.下面的代码量更少)
    • render => vdom => UI
  • render函数详解
    • render:h=>h(App)  //箭头函数形式
      
    • // 普通函数形式
      render:function(createElement){
          // 1.普通写法 : createElement("标签",{标签的属性},[''])  createElement 有三个参数 第一个参数为标签元素,第二个参数为标签属性,第三个参数为标签内容
          return createElement(
              'h2',
          	{class:'box'},
              [
                  "Hello world",
                  createElement(
                  'button',
                   ['按钮']
                  )
              ]
          )
         // 2.传入组件对象:return createElement(组件对象名)
          return createElement(App)
      }
      
    • .vue文件中的template是由 package.json中的devDependencies中的vue-template-compiler解析成render函数
v-for遍历数组与对象
  • 官方建议给定key值
  • 遍历数组默认遍历数组中的每一个元素
  • 遍历对象,如果遍历列表为整个对象,则默认遍历对象中的value值
  • 如何保证Vue渲染的DOM元素中的内容值(value)不被复用:
    • 保证元素的key不同即可
数组方法总结
  • 改变原数组的方法
    • push() 在数组后添加一个元素
    • pop() 删除数组中的最后一个元素
    • unshift() 在数组最前面添加元素
    • shift() 删除数组中的第一个元素
    • splice() 数组的添加替换删除方法 删除元素/插入元素/替换元素
      • splice(1) 删除元素:第二个参数传入你要删除几个元素,如果没有传就删除后面所有的元素
      • splice(1,2,“3”) 替换元素:第二个参数表示我们要替换几个元素,后面是用于替换前面的元素
      • splice(1,0,“x”,“y”) 插入元素,第二个参数传入0,并且后面要跟上要插入的元素
      • 总结:第二个参数为重点参数,决定此方法的作用
    • sort() 数组的简单排序方法
    • reverse() 数组首位翻转方法 改变原来的数据,但不会产生新数组
  • 不改变原数组的方法
    • concat() 合并两个数组
    • join() 把数组转换成字符串返回
    • slice(start,end) 更换数组中的元素
  • Vue.set(要修改的对象,索引值,修改后的值)
组件化
  • 步骤:创建=》注册=》使用

  • components:{ 组件标签名:组件构造器}

  • 全局注册

    • import 组件 from "组件地址"
      Vue.use(组件名)
      
  • 局部注册

    • import 组件 from "组件地址"
      components:{
      	组件名:组件构造器
      }
      
data为什么是函数

如果data不是函数,组件之间数据会互相影响,如果data为一个对象,且多个组件共用data中的一个变量,那么这个变量相当于把data的地址进行赋值,且多个组件共用同一个对象地址,数据将会被使用这个变量的所有组件更改。data为函数则是每次调用这个函数,且数据都是独立的互不影响

组件通信
  1. 父传子

    • props:[]

      props:["子组件中需要使用的变量名","..."]
      
    • props:{}

      props:{
      	子组件使用的变量名:{
      		type: 传递参数的类型,
      		default: 默认类型, // 默认类型如果为数组或者对象,且vue版本在2.5.17之后的版本,需要写成函数return的形式
      		default(){
      		return [""]
      		return {""}
      		}
              default:()=>()
      		required:true 必传参数
      	}
      }
      
      //自定义验证形式,可以做简单的验证
      props:{
          validator:function(value){
              return ["需要验证的参数""..."].indexof(value)!== -1
          }
      }
      
      //自定义构造函数
      function Person(firstName,lastName){
          this.firstName=firstName
          this.lastName=lastName
      }
      vue.component("组件名",{
          props:{
              author:Person
          }
      })
      
  2. 子传父

    • 父组件导入,注册子组件=》标签内定义自定义事件,定义带参数方法=》子组件$emit(“父组件自定义事件名”,要传递的参数)
  3. 父访问子

    • $children
    • $refs
  4. 子访问父

    • $parent
    • $root
插槽
  • 默认插槽:如果在组件插槽中设置了默认内容,则组件中显示插槽的默认内容;如果不想让显示默认内容,则可以在组件标签中设置想要显示的内容来替换默认内容

  • 具名插槽:给插槽命名给一个name属性,以达到控制单个确定插槽的目的

    • <div id="app">
          //第一种写法
          <cpn><span  slot="left">标题</span></cpn>
          //第二种写法
          <cpn><template v-slot:center><button>登录</button></template></cpn>
          //第三种写法
          <cpn><template #right><button>返回</button></template></cpn>
      </div>
      
      <template id="cpn">
      	<slot name="left"><span>左边</span></slot>
          <slot name="center"><span>中间</span></slot>
          <slot name="right"><span>右边</span></slot>
      </template>
      
  • 作用域插槽:用来进行父子组件之间的数据传递

    • // 子组件
      <slot name="title" :row="row" :ot="other"></slot>
      
      <script>
          data(){
              return{
                  row:{
                      name:"hushiyi",
                      age:24
                  },
                  other:"我是子数据"
              }
          }
      </script>
      
      // 父组件
      <Child>
      <template #title="{row,ot}">
          {{scope.row}}
      	{{scope.ot}}
      </template>
      </Child>
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值