zoukankan      html  css  js  c++  java
  • vue实例(instance)

    1. vue instance声明方式

    const vm = new Vue({
         el:"#app",                         //挂载的节点,一般都是通过id
         template:`<div>{{text}}</div>`,    //模板
         data:{                             //数据
             text:0
         }
     })
    

    2. vue instance 上的属性

    1. vm.$data
    vm.$data就是当前instance(vm)中data属性。可以通过修改vm.$data.text = 1修改上例中text的值。
    
    2. vm.$el
    vm 挂载的DOM节点
    console.log(vm.$el);  //输出:<div>0</div>  //输出类型为object 
    
    3. vm.$options
    vue实例初始化的对象,会添加一些默认参数,上例输出:
    
    ![](https://img2020.cnblogs.com/blog/2174201/202109/2174201-20210909174820969-1257639220.png)
    
    
    4. vm.$root
    vue组件树的根实例,组件树中任意组件访问的vm.$root都是一样的,上例中没有父实例,所以输出为自己
    
    ![](https://img2020.cnblogs.com/blog/2174201/202109/2174201-20210909174853909-1197652034.png)
    
    
    5. vm.$parent
    vm的父实例。
    
    6. vm.$props
    当前组件接受的props对象
    
    7. vm.$children
    当前实例的子组件
    
    8. vm.$slots  vm.$scopedSlots
    插槽概念
    
    9. vm.$refs
    注册过ref的DOM元素或者组件实例
    
    10. vm.$isServer
    用来判断是否在服务器端,主要用于服务端渲染的时候。
    
    

    3. vue instance 上的方法

    1. vm.$watch
    vm.$watch功能上和vue实例中的watch方法相同
    
        const vm = new Vue({
            el: "#app",
            template: `<div>{{text}}</div>`,
            data: {
                text: 0
            },
            // watch: {
            //     text(newValue,oldValue){
            //         console.log(`${oldValue} : ${newValue}`);
            //     }
            // },
        })
     
        setInterval(() => {
            vm.$data.text += 1;
        }, 1000)
     
        //text : 监听的属性值
        //newValue: 变化之后text的值
        //oldValue: 变化之前text的值
        vm.$watch('text', (newValue,oldValue) => {
            Console.log(`${oldValue} : ${newValue}`);
        })
        //上述vm.$watch实现方法和 vm实例中watch中实现的功能相同
    
     不同点:
    vm 中watch的对text的监听在vm实例销毁的时候自动移除。
    通过vm.$watch添加的监听,需要主动移除监听。
    移除方法:
    
        //上例代码修改
        //text : 监听的属性值
        //newValue: 变化之后text的值 新值参数在前
        //oldValue: 变化之前text的值 老值参数在后
        //vm.$watch 最后会返回一个方法(unWatch),通过调用unWatch()移除监听
        const unWatch = vm.$watch('text', (newValue, oldValue) => {
            console.log(`${oldValue} : ${newValue}`);
            //setTimeout 中2S移除监听,
            //输出结果因为:
            //0 : 1
            //1 : 2
        })
        // 2S 后移除vm.$watch监听
        setTimeout(() => {
            unWatch();
        }, 2000)
    
    
    2. vm.$on 、vm.$once、vm.$emit、vm.$off
    绑定:vm.$on 、vm.$once(只触发一次)
    触发:vm.$emit
    移除:vm.$off
    
        setInterval(() => {
            vm.$data.text += 1;
            //触发指定事件 vm.$data.text为触发事件所带的参数
            vm.$emit('eventOne', vm.$data.text);
        }, 1000)
     
        //绑定eventOne事件 触发事件所携带的参数,将作为函数的参数传入
        //vm.$once //也是绑定事件方法,用法一样;区别:vm.$once只能触发一次
        vm.$on('eventOne', (param1) => {
            console.log(`eventOne emited ${param1}`)
        })
    
    
    3. vm.$set、vm.$delete
    vm.$set 是给响应式的对象(基本都是vue实例中的data对象)添加一个新的属性,并且这个新的属性也是响应式的。
    响应式解释:就是当这个对象改变的时候,vue会重新渲染
    问题场景:当前vm实例的data中新增一个obj:{}属性,在运行过程中添加了一个a属性,即obj:{a:1},此时的obj.a是不具备响应式的。
    解决方法:1.(推荐)在定义obj的时候,首先考虑到后续用到的值,通过obj:{a:0}方式提前定义
                      2.(不推荐)使用vm.$forceUpdate()强制重新渲染当前实例
                              原因:开销比较大
                      3.   使用vm.$set
    
    
       //此时obj.a每次改变,都会重新渲染 
       const vm = new Vue({
            el: "#app",
            template: `<div>{{obj.a}}</div>`,
            data: {
                text: 0,
                obj: {}
            },
        })
        let i = 1;
        setInterval(() => {
            i++;
            vm.$set(vm.obj, 'a', i);
        }, 1000)
    
    vm.$delete 删除对象属性。响应式对象删除的时候会更新视图
    
    
    
  • 相关阅读:
    【Python 开发】第三篇:python 实用小工具
    【Python 开发】第二篇 :Python安装
    【Linux 运维】 安装PHP工具Composer
    【shell 每日一练6】初始化安装Mysql并修改密码
    【zabbix 监控】第三章 创建主机组和主机
    【Docker】第一篇 Docker的初始化安装部署
    【shell 练习5】编写简单的多级菜单
    【zabbix 监控】第二章 安装测试被监控主机
    【zabbix 监控】第一章 zabbix的安装配置
    1数组和字符串题解
  • 原文地址:https://www.cnblogs.com/xm0328/p/15248189.html
Copyright © 2011-2022 走看看