• 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
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
     
  • 相关阅读:
    机器学习:评价分类结果(Precision
    机器学习:评价分类结果(F1 Score)
    机器学习:评价分类结果(实现混淆矩阵、精准率、召回率)
    机器学习:评价分类结果(准确率的陷阱、混淆矩阵、精准率、召回率)
    TCP三次握手四次挥手
    LeetCode447. Number of Boomerangs
    Leetcode392. Is Subsequence
    LeetCode406. Queue Reconstruction by Height Add to List
    LeetCode455. Assign Cookies
    LeetCode 34. Search for a Range
  • 原文地址:https://www.cnblogs.com/wgy0528/p/11648847.html
Copyright © 2020-2023  润新知