• 了解vue APi


    阳光那么好,何必自寻烦恼,过好每一个当下,一万个美丽的未来抵不过一个温暖的现在。

    一。Vue.nextTick():

    该api 是在Dom节点更新结束之后执行的一个延时回调。在修改数据之后,立即使用这个方法,可以获取到更新后的Dom。

    使用场景:当修改的时候,将获取到的数据对页面的form进行赋值的时候,可以使用。

    或者在created()钩子函数进行的DOM操作一定要放在Vue.nextTick()方法的回调函数中,因为created()中还没有对DOM 节点进行渲染,所以此时进行DOM节点的操作是没有意义的,所以,要将DOM节点的操作的JS代码放在Vue,nextTick()回调函数中。

    二。Vue.set(target,key,value):

    像响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发试图的更新。它必须用于向响应式对象上添加新的属性。因为Vue 无法探测普通的新增属性。

    使用场景:在vue 中,我们利用索引直接设置数组中的某一项的时候,赋值成功,但是页面渲染结果不会更改,此时,就需要用到Vue.set()方法。

     <div v-for="(item, index) in list" :key="index">
            <div @click="clickOne(item, index)">{{item}}</div>
     </div>
    
    <script>
    export default {
      data() {
        return {
          list: []
        }
      },
      methods: {
        clickOne(val, index) {
        // 通过数组的索引去修改数组中的某一项,数据改变,但是页面没有改变
    this.list[index] = '123';
        // this.$set()方法,既更改了数组中对应索引的值,同时视图也更新了。
    this.$set(this.list, index, '1243') }, } } </script>

    三。Vue.delete(target, key) 

    删除对象的属性。如果对象是响应式的,确保删除能触发更新视图。这个方法主要是用于避开Vue不能检测到属性被删除的限制。

    <div>
            <div @click="deleteObj"> {{obj.name}}</div>
            <div>{{obj.age}}</div>
    </div>
    <script>
    export default {
      data() {
        return {
          obj: {
            name: 'xiaoxiannv',
            age: 18
          }
        }
      },
      methods: {
        deleteObj() {
          // delete this.obj.name
          this.$delete(this.obj, 'name')
        },
      }
    }
    </script>

    四。Vue.component(id,  function/object)

    该api 是注册或获取全局组件,注册还会自动使用给定的Id设置组件的名称

    五。Vue.mixin(mixin):混入

    该api全局注册一个混入,影响注册之后所有创建的每个Vue实例。所以,可以用来给所有的vue实例添加可重复使用的属性,方法,及特性。当然,也可以为自定义对象注入处理逻辑。

    当有多个组件中,有多个共同的方法,我们可以使用混入的方法,将公共的方法进行封装,在组件中,调用该混入的方法。

    使用场景:mixins.js:封装的混入方法。

    export default {
        data() {
            return {
                // data 中公有的数据
            }
        },
        methods: {
            a() {
                console.log('提取公有的方法')
            }
        }
    }

    a.vue:在页面中引用混入

    import mixins  from '@/mixins'
    export default {
    mixins: [mixins]
    }

    六。PropsData

    该api是用在全局扩展时进行传递数据,我们用propsData传值的步骤:

    1. 在全局扩展里加入props进行接收。propsData:{a:1}

    2. 传递时用propsData进行传递。props:[‘a’]
    3. 用插值的形式写入模板。{{ a }

    使用场景:::

    <body>
        <header></header>
    </body>
    <script type="text/javascript">
        var app = Vue.extend({
            template: `<p>{{message}}---{{a}}</p>`,
            data: function () {
                return {
                    message: 'hello vue',
                }
            },
            props: ['a']
        });
        new app({
            propsData: {
                a: 1
            }
        }).$mount('header');
    </script>

    七。watch 监听数据的变化。只有当数据发生变化,才会走这一步。

    {[key: string]: string | Function | Object  }
    在watch方法中,key是一个字符串,表示被检测的数据。值可以是一个函数,但是不能使用箭头函数。值也可以是一个对象。
    使用场景:
    'value'(newVal, oldVal) {
          this.modelVal = newVal;
    }

    该方法有两个参数,第一个参数代表的是改变之后的值,第二个参数代表的是改变之前的值。当value的值改变的时候,就能触发对modelValue的赋值。

    深入监听:watch 是无法监听对象内部的数据的,对象内部属性或者方法发生改变的时候,可以使用深度监听模式。

    superiors: {
                handler: function (val) {
                    if (val !== null) {
                        this.departmentNames = val
                        this.placeholderInput = ''
                    } 
                },
            // deep:true表示 深度监听
                deep: true
    }            

    因为,watch在最初绑定的时候不会执行的,得等到数据的变化才会执行。但是,有些需求是在他最初绑定的时候,就执行,这个时候,就需要使用watch 中的immediate属性。

    selectData:{
          handler(newList, oldList) {
            this.loadFlag = false;
            this.listArr = newList;
          },
          immediate: true
     },

    八。parent:

    指定已创建的实例之父实例,在两者之间建立父子关系,子实例可以用this.$parent访问复实例,子实例被推入父实例的$children数组中。

    在子组件中打印this.$parent,展示结果如下:能看到父组件中的data,methods等。

    在父组件中,使用this.$children,打印结果如下:显示出父组件中引用的所有的子组件。

    $parent,$childeren 方法可以不通过父子组件传值,子组件拿到父组件的值,父组件拿到子组件的值,但是,这只是一个紧急使用手段,正常情况,还是应该使用父组组件传值的方法。

  • 相关阅读:
    安卓手机root
    adb导出安卓 把手机内存文件导入到电脑里 adb安装软件
    象棋start
    当我new class的时候,提示以下错误: Unable to parse template "Class" Error message: This template did not produce a Java class or an interface Error parsing file template: Unable to find resource 'Package Header.j
    通信协议:HTTP、TCP、UDP
    根据地址获取经纬度
    chrome提示Adobe Flash Player过期解决
    spring mvc:实现给Controller函数传入list<pojo>参数
    [转]Hibernate入门:批量插入数据
    spring mvc:实现给Controller函数传入map参数
  • 原文地址:https://www.cnblogs.com/mn6364/p/10551209.html
Copyright © 2020-2023  润新知