vue.js

vue.js

1.关闭生成提示
 Vue.config.productionTip = false //阻止提示
2.Vue实例中data和el的两种写法
 var vm = new Vue({
      el: "#app", //el的一中写法
    })
    vm.$mount('#app') //el的第二种写法

data的两种写法


    var v = new Vue({
      data() { //data的函数形式这里的函数不能使用箭头函数
        return {
          title: "hello"
        }
      },
      //第二中方式
      data: {
        title: 'hello'
      }
    })
3.vue中的MVVM模型
  • M(model)模型 :是data中的的数据

  • V(view)视图:是模板代码

  • VM(view Model)视图模型:就是VM实例

    观察发现data中的所有属性都在VM实例中出现,VM中所有的属性以及vue原型上的所有属性,在vue实例中都可以使用

4.vue中的数据代理(需要了解javascript中的Object.defineProperty())

数据代理:通过一个对象代理对另一对象的数据进行(读/写操作)

   let obj1 = {
      x: 100
    }
    let obj2 = {
      y: 100
    }

    //通过代理obj2中
    Object.defineProperty(obj1, 'y', {
      get: function () {
        return obj2.y
      },
      set: function (value) {
        return obj2.y = value
      }
    })
    console.log(obj1)

vue中的_data中的数据 === vue中data

5.事件修饰符
  1. 阻止默认事件:.prevent 表单提交可以阻止事件的刷新
  2. 阻止冒泡事件:.stop
  3. .passive修饰符尤其能够提升移动端的性能。常用在滚动条上
6.键盘修饰符
  1. 键盘事件 v-on.keyup或是v-on.keydown
  2. 自定义键盘事件 Vue.config.keyCodes.f1 = 112
  3. 常用的键盘别名:.enter .tab .delete (捕获“删除”和“退格”键),.esc.space.up.down.left.right,,.ctrl.alt.shift.meta
7.vue中事件总结

1.vue中事件 使用v-on.xxx或者@xxx绑定事件,其中xxx是事件名

  1. 事件的回调要配置在methods中,最终会在vue实例中,
  2. methods中配置的函数不要是箭头函数,否则this指向的就不是vue的实例了。
  3. methods中的函数都是被vue实例管理的。
8.vue的计算属性(computed)

计算属性是需要的属性不存在,通过已经有的属性计算得到,如果计算属性要修改,必须写成set函数去响应的修改对象的属性

监听属性watch(用于响应数据的变化)

vue中的watch默认是不进行深度监测的。如果要深度监测属性需要将deep的值设置为true,深度监视要根据数据的进行监视

      watch: {
        Number: {
          deep: true, //深度监听
          immediate: true, //立即监听
          handler(newValue, oldValue) {
            console.log(newValue, oldValue)
          }
        },
        //watch的简写形式
         number(newValue,oldValue){
           console.log(newValue,oldValue)
         }
      }

       
9.计算属性和侦听属性的区别

computed能完成的功能watch都能完成,但是watch能完成的功能computed不一定能完成,比如异步函数。

两个重要的小原则:1.所被vm管理的函数都要写成正常的函数,不被vm管理的函数要写为箭头函数(例如:定时器,ajax回调函数,promise的回调函数)这样this指向才是MV

10.样式的绑定
  1. 字符方式绑定样式适用于样式名不确定的情况下
  2. 数组样式的绑定适用于在样式名和样式的个数不确定的情况下使用,
  3. 样式的对象形式的绑定,样的名和个数都确定但是样式是动态绑定的。
11. vue中的for循环 :key的作用和原理
  1. key是虚拟DOM对象的标识,当数据发生变法时,当数据发生变化时,vue会根据【新数据】生成【新的虚拟DOM】,随后vue进行【新虚拟DOM 】与【旧虚拟DOM】的差异比较。
  2. observer的观察者模式 用于监测vue中data的数据变化,
  3. vue监视数据的原理
    1. vue会监测data中所有层次的数据,
    2. vue是怎样监测对象中的数据了?
      1. 通过setter实现监视,并且要在new Vue 是就传入要监测的数据
      2. 对象中后添加的对象vue默认不是响应是的。如果要变为响应式的就要使用以下两个API
        1. Vue.set()
        2. 或者是vm.$set()
        3. 注意Vue.set()和vm.$set()方法不能对根元素添加属性
  4. vue是如何监测data中的数组的?
    1. 通过包裹数组更新元素的方法。本质就是做了两件事,
    2. 调用数组中原生的方法进行更新(push()pop()shift()unshift()splice()sort()reverse()
    3. 重新更新模板更新数据
12 vue的表单搜集数据
  1. input type="text" >则v-model收集的是value的值,用户输入的就是value值
  2. <input type="radio">则v-model收集的是value的值,并且要个标签配置value值
  3. <input type="checkbox" >如果没有给input配置value值收集的是一个布尔值,若要收集多个input的value值。则要个input配置value值。v-model绑定的是一个数据,
  4. input的三个修饰符:1:.lazychange 事件_之后_进行同步,2:.number 收集的数据是number类型,3:.trim清除首尾的空格

13.vue的内置指令

vue的内置指令有:v-text, v-html,v-once,v-cloak:隐藏没有解析的元素,v-pre:可以利用它跳过没有编译的元素

13 自定义指令
  1. 自定义指令用directives注册一下自定指令

          directives: {
            big(ele, bind) {
              ele.innerText = bind.value * 10
            },
            focus: {
              inserted(e) {
                e.focus()
              }
            }
          }
    
  2. 自定义指令的三个钩子

    1. bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
    2. inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
    3. update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前
    4. 指令调用时要用v-开头
14.生命周期
  1. beforeCreate:此时无法通过vm访问data中的数据,methods中的方法,
  2. created:此时可以通过vm访问data中的数据,methods中的方法
  3. beforeMount:页面呈现的是未经Vue编译的DOM结构,所以DOM的操作都不凑效。
  4. mounted:此时页面中呈现的都是Vue编译后的DOM,对DOM的操作都有效。至此页面的初始化完成了。一般在此进行:开启定时器,发送网络请求,发送订阅消息,绑定自定义事件等
  5. beforeUpdate:此时vue中的数据已经更新了。但是DOM的数据还没更新。
  6. update:DOM中的数据更新完毕
  7. beforeDestroy:vue实例销毁之前调用。在这一步,实例仍然完全可用
  8. destroy:销毁实例
15Vue的组件

​ 关于VueComponent:

   1. 组件本质上是一个VueComponent 的构成函数,但不是程序员定义的,是Vue.extend()生成的。
   2. 我们只要调养组件,Vue解析是就会创建一个组件实例,即Vue内部帮我们调用了一下new VueComponent()
   3. 每次调用vue.extend就会生成一个全新的VueComponent
16.vue的cli的使用

​ vue的CLI需要修改的配置项要参考vue的cli的配置。需要配置的都在vue.config.js中。

如果需要查看 配置文件,输入vue inspect > output.js 这个文件是不能修改的,

17.vue的Prop组件给子组件传递参数
18.vue的混入[mixin]

来分发 Vue 组件中的可复用功能。一个混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被“混合”进入该组件本身的选项。

//定义个混入
export default {
  methods: {
    showName() {
      console.log(this.name)
    }
  },
}
//局部引入
import mixin from "../js/mixin.js";
export default {
  mixins: [mixin],
  name: "School",
  data() {
    return {
      address: "上海",
      name: "张三",
      sex: "男",
      age: 18,
    };
  },
};

//全局引入
Vue.mixin('mixin')
19.插件

功能:用于增强Vue.

本子:包含一个有install方法的对象,install方法的第一参数是Vue,第二个以后的参数都是插件使用者传递的参数

//定义一个插件
 对象.install = function(Vue,options){
     Vue.filter(){}
     ....
 }
//使用插件
在main.js中添加
import plugins form '...'
Vue.use(plugins)
20自定义事件,
21组件之间值的传递方式
1.通过绑定属性方式

1.父组件向子组件传递 通过绑定属性值的方式,子组件通过props接受传递过来的属性

 <my-foot :todos="todos"></my-foot>  //父传子
 //子组件接受
 export default {
  name: "MyFoot",
  props: ["todos"],
  data() {
    return {
      visibility: "all",
    };
  },
  1. 子组件向父子传值

1.父组件先定义一个方法,通过绑定属性方式发传递个子组件,子组件通过事件触发父组件的方式把子组件的值传递个父组件

<template>
  <div id="app">
    <h2>父组件</h2>
    <Stu :showStuName="showStuName"></Stu>
  </div>
</template>

<script>
import Stu from "./components/Stu.vue";
import School from "./components/School.vue";
export default {
  name: "App",
  components: {
    Stu,
    School,
  },
  methods: {
      //父组件的方法
    showStuName(name) {
      console.log(name);
    },
    demo(name) {
      console.log("学校名", name);
    },
  },
  mounted() {
    this.$refs.school.$on("sendSchoolName", this.demo);
  },
};
</script>

//子组件
<template>
  <div class="stu">
    <h3>学生姓名:{{ name }}</h3>
    <h3>学生年龄:{{ age }}</h3>
    <button @click="sendData">向父组件传值</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: "zhangsan",
      age: 18,
    };
  },
  props: ["showStuName"], //接受父子组件的方法
  methods: {
      //通过事件触发父子传递的方法
    sendData() {
      console.log("向父组件传值");
      this.showStuName(this.name);
    },
  },
};
</script>

3.子组件向父组件传值通过自定方法和$emit()

1.在子组件实例上绑定一个自定方法

<template>
  <div id="app">
    <h2>父组件</h2>
    < <school @sendSchoolName="demo"></school> 
  </div>
</template>

<script>
import Stu from "./components/Stu.vue";
import School from "./components/School.vue";
export default {
  name: "App",
  components: {
    Stu,
    School,
  },
  methods: {
    demo(name) {
      console.log("学校名", name);
    },
  },
  mounted() {
    this.$refs.school.$on("sendSchoolName", this.demo);
  },
};
</script>


2.子组件通过事件触发自定方法

//子组件
<template>
  <div class="sch">
    <h3>学校名:{{ name }}</h3>
    <h3>地址:{{ address }}</h3>
    <button @click="sendName">传输学校名</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: "xxxx学校",
      address: "上海",
    };
  },
  methods: {
      //点击事件
    sendName() {
        //触发在父组件绑定的自定方法
      this.$emit("sendSchoolName", this.name);
    },
  },
};
</script>

4.父组件通过$refs获取子组件再绑定一个回调函数

<template>
  <div id="app">
    <h2>父组件</h2>
    <school ref="school"></school>
  </div>
</template>

<script>
import Stu from "./components/Stu.vue";
import School from "./components/School.vue";
export default {
  name: "App",
  components: {
    Stu,
    School,
  },
  methods: {
    showStuName(name) {
      console.log(name);
    },
    demo(name) {
      console.log("学校名", name);
    },
  },
  mounted() {
      //给子组件绑定事件
    this.$refs.school.$on("sendSchoolName", this.demo);
  },
};
</script>

子组件通过$emit()来触发这个方法

<template>
  <div class="sch">
    <h3>学校名:{{ name }}</h3>
    <h3>地址:{{ address }}</h3>
    <button @click="sendName">传输学校名</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      name: "xxxx学校",
      address: "上海",
    };
  },
  methods: {
    sendName() {
      this.$emit("sendSchoolName", this.name);
    },
  },
};
</script>
20.组件的自定义事件
  1. 是组件间的一中通信方式,适用于 子组件 ===>父组件通信

  2. 使用场景 A是父组件,B是子组件。B想给A传递数据,那么就要在A中给B绑定一个自定义事件(事件得回调在A中)

  3. 绑定自定义事件。

    (1):在父组件中:< <school @sendSchoolName="demo"></school>或者 <school v-on:sendSchoolName="demo"></school>

    (2):方式:

    ```
      methods: {
       ...
        demo(name) {
          console.log("学校名", name);
          this.name = name;
        },
      },
      mounted() {
        this.$refs.school.$on("sendSchoolName", this.demo);
      },
          
    ```
    
  4. 自定义事件的触发 `this.$emit(“sendSchoolName”, ‘数据’);

  5. 解绑自定事件 this.$off('sendSchoolName')

  6. 在父组件上也可以给子组件绑定原生事件 ,但是需要使用.native 例如:<Stu :showStuName="showStuName" @click.native="demo"></Stu>

  7. 注意:通过this.$refs.school.$on("sendSchoolName", this.demo);中的回调要么使用methods中的方法,或者是箭头函数

      mounted() {
        this.$refs.school.$on("sendSchoolName", (name, ...arg) => {
          console.log(name);
        });
      },
    
21.全局事件总线
  1. 全局事件总线是一种组件间通信方式,适用于任意组件间的通信。

  2. 安装全局事件总线

    new Vue({
     ...
      beforeCreate() {
        Vue.prototype.$bus = this //事件总线
      },
    }).
    
  3. 使用事件总线

    1. 接受数据:例如A组件向接受数据,则在A组件中给$bus绑定自定事件,事件的回调留着在A组件自身。

        methods: {
          demo(name) {
            console.log("学校名字是", name);
          },
        },
        mounted() {
          //通过事件总线向兄弟节点发送数据
          this.$bus.$on("showSchoolName", this.demo); //this.demo是事件的回调
        },
      
    2. 提供数据

      methods: {
          sendSchoolName() {
            this.$bus.$emit("showSchoolName", this.name); //提供数据
          },
        },
      
    3. 要手动关闭 绑定的事件一般是在destroy(){}这个周期关闭

        destroy() {
          this.$bus.$off(["changeId", "removeId"]);
        },
      
22消息的订阅和发布
  1. 这是一直组件间的通信方式

  2. 使用步骤:

    1. 安装一个pubsub插件 cnpm install pubsub-js --save

    2. 在需要发布消息和订阅消息的组件中分别引入import PubSub from "pubsub-js";

    3. 发布消息

       sendData() {
            //点击是发布一个消息 
            PubSub.publish("hello", this.name); //hello是消息名,this.name是参数
          },
      
    4. 订阅消息

       mounted() {
          this.pubId = PubSub.subscribe("hello", (msgName, data) => { //msgName消息的名字,data 消息的参数, this.pubId是这个消息的id
            console.log("订阅了一个消息");
            console.log(arg);
          });
        },
      
    5. 取消消息订阅

      destroy() {
          PubSub.unsubscribe(this.pubId);  //取消订阅
        },
      
    23.$nextTick()的使用
    1. 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
    24Vue封装的过渡与动画
    1. 作用:在插入,更新或移除DOM元素,在适当的时候添加样式类名。

    2. 图示:
      在这里插入图片描述

    3.写法:

    1. 元素进入时的样式:

      1. v-enter:进入的起点
      2. v-enter-to:进入的终点
      3. v-enter-active:进入过程中
    2. 元素离开是的样式:

      1. v-leave:离开的起点
      2. v-leave-to:离开的终点
      3. v-leave-active:离开的过程
    3. 如果有多个元素请使用<transition-group> 每个元素要一个唯一的Key值

    4. 使用第三方动画库

      1. 安装动画库 cnpm install animate.css --save

      2. 在组件中引入动画样式 import "animate.css";

      3. 在元素中使用

        <transition
              name="animate__animated animate__bounce"
              enter-active-class="animate__backInDown"
              leave-active-class="animate__backOutUp"
              appear
            >
              <h1 v-show="isShow">使用动画库的动画</h1>
            </transition>
        
      25. vue中的配置代理(多数情况下vue中的ajax请求是用axios)
      1. 配置一个代理服务器

个元素要一个唯一的Key值

  4. 使用第三方动画库

     1. 安装动画库 `cnpm install animate.css --save`

     2. 在组件中引入动画样式 `import "animate.css";`

     3. 在元素中使用

        ```js
        <transition
              name="animate__animated animate__bounce"
              enter-active-class="animate__backInDown"
              leave-active-class="animate__backOutUp"
              appear
            >
              <h1 v-show="isShow">使用动画库的动画</h1>
            </transition>
        ```

     ######  25. vue中的配置代理(多数情况下vue中的ajax请求是用axios)

待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值