zoukankan      html  css  js  c++  java
  • Daily question

    1、Vue父组件可以监听到子组件的生命周期吗?如果能请写出你的实现方法

    1)实现方法一

    比如有父组件 Parent 和子组件 Child ,如果父组件监听到子组件挂载 mounted 就做一些逻辑处理,可以通过以下写法实现:

    // Parent.vue
    <Child @mounted="doSomething"/>
    
    // Child.vue
    mounted(){
       this.$emit("mounted");
    }

    2)实现方法二

    以上需要手动通过 $emit 触发父组件的事件,更简单的方式可以在父组件引用子组件时通过 @hook 来监听即可,如下所示:

    // Parent.vue
    <Child @hook:mounted="doSomething" />
    
    doSomething(){
       console.log('父组件监听到 mounted 钩子函数...');
    },
    
    // Child.vue
    mounted(){
       console.log('子组件触发 mounted 钩子函数...');
    }
    
    // 以上输出顺序为:
    // 子组件 触发 mounted 钩子函数...
    // 父组件监听到 mounted 钩子函数...

    当然 @hook 方法不仅仅是可以监听 mounted,其他的生命周期事件,例如: created,updated 等都可以监听。

    2、apply,call,bind的区别

    使用apply,call,bind

    使用 apply、call、bind 函数是可以改变 this 的指向的

    apply 和 call 的区别

    其实 apply 和 call 基本类似,他们的区别只是传入的参数不同。

     call 方法接受的是若干个参数列表,而 apply 接收的是一个包含多个参数的数组

    apply/call 与 bind 的区别

    我们先来将刚刚的例子使用 bind 试一下

    我们会发现并没有输出,这是因为:

    bind()方法创建一个新的函数, 当被调用时,将其this关键字设置为提供的值,在调用新函数时,在任何提供之前提供一个给定的参数序列。

    所以我们可以看出,bind 是创建一个新的函数,我们必须要手动去调用:

    【注意】

    apply/call 改变了函数的 this 上下文后马上执行该函数

    bind 则是返回改变了上下文后的函数,不执行该函数

  • 相关阅读:
    Day9
    Day9
    Day9
    洛谷 P1896 [SCOI2005]互不侵犯
    洛谷 P1879 [USACO06NOV]玉米田Corn Fields
    Day9
    最大m段子段和 Day9
    jsp内置对象-application对象
    jsp内置对象-session对象
    jsp内置对象-response对象
  • 原文地址:https://www.cnblogs.com/rachelch/p/13231755.html
Copyright © 2011-2022 走看看