zoukankan      html  css  js  c++  java
  • vue中你可能不经常用到的知识

    vue 引入公共组件之 require.context

    1.场景:如页面需要导入多个组件,原始写法:

    import test from '@/components/test'
    import test1 from '@/components/test1'
    import test2 from '@/components/test2'
    components:{test,test1,test2}
    

    2.这样就写了大量重复的代码,利用 require.context 可以写成

      在main.js中
      const path = require('path')
      const files = require.context('./components', false, /.vue$/)
      const modules = {}
      files.keys().forEach(key => {
        const name = path.basename(key, '.vue')
        console.log(name, '组件名称')
        modules[name] = files(key).default || files(key)
        console.log(modules, '值')
        Vue.component(name, files(key).default || files(key))
     })
    在所需要的页面直接使用
    <template>
      <div>
      <test></test>
      </div>
    <template>

    2、侦听器的handler方法和immediate属性

    侦听器的handler方法和immediate属性

    var vm = new Vue({

      el: '#demo',
      data: {
        firstName: 'Foo',
        lastName: 'Bar',
        fullName: 'Foo Bar'
      },
      watch: {
        firstName: function (val) {
          console.log('第一次没有执行')
          this.fullName = val + '·' + this.lastName
        }
      }
    })

     初始化的时候

    firstName函数并没有执行
    fullName并没有值
     

    如果想firstName在第一次被绑定的时候就执行:

    watch: {
      firstName: {
        handler(val){
          console.log('第一次执行了')
          this.fullName = val + '·' + this.lastName
        },
        immediate:true//在watch中声明后立即执行handler
      }
    }

     注意看:

    fullName 现在是有值

    3.4attrs和listeners

    2.4.0 新增 这两个是不常用属性,但是高级用法很常见; 1.attrs
场景:如果父传子有很多值,那么在子组件需要定义多个 props
解决:attrs获取子传父中未在 props 定义的值

    // 父组件
    <home title="这是标题" width="80" height="80" imgUrl="imgUrl"/>
    
    // 子组件
    mounted() {
      console.log(this.$attrs) //{title: "这是标题",  "80", height: "80", imgUrl: "imgUrl"}
    },
    复制代码

    相对应的如果子组件定义了 props,打印的值就是剔除定义的属性

    props: {
       {
        type: String,
        default: ''
      }
    },
    mounted() {
      console.log(this.$attrs) //{title: "这是标题", height: "80", imgUrl: "imgUrl"}
    },
    复制代码

    2.listeners
场景:子组件需要调用父组件的方法
解决:父组件的方法可以通过 v-on="listeners" 传入内部组件——在创建更高层次的组件时非常有用

    // 父组件
    <home @change="change"/>
    
    // 子组件
    mounted() {
      console.log(this.$listeners) //即可拿到 change 事件
    }
    复制代码

    如果是孙组件要访问父组件的属性和调用方法,直接一级一级传下去就可以

    3.inheritAttrs

    // 父组件
    <home title="这是标题" width="80" height="80" imgUrl="imgUrl"/>
    
    // 子组件
    mounted() {
      console.log(this.$attrs) //{title: "这是标题",  "80", height: "80", imgUrl: "imgUrl"}
    },
    
    inheritAttrs默认值为 true,也就是父组件上的属性会显示到根组件上
    如果设置为 false 就会隐藏

    作者:火狼1
    链接:https://juejin.im/post/5d9d386fe51d45784d3f8637
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
     
  • 相关阅读:
    85. Maximal Rectangle
    120. Triangle
    72. Edit Distance
    39. Combination Sum
    44. Wildcard Matching
    138. Copy List with Random Pointer
    91. Decode Ways
    142. Linked List Cycle II
    异或的性质及应用
    64. Minimum Path Sum
  • 原文地址:https://www.cnblogs.com/wgy0528/p/11648847.html
Copyright © 2011-2022 走看看