vue native修饰符(组件标签上的事件修饰符native详解)

 分类:vue教程时间:2022-08-12点击:

原生事件修饰符.native关于组件标签上的事件,父组件使用子组件时的修饰符,在组件标签上是没办法触发原生的js事件的,vue会将其作为自定义事件处理。

1、关于组件标签上的事件

示例代码如下:

<div id="app">
  <!-- 使用组件 -->
  <!--  组件标签上使用DOM元素原生事件不会触发, -->
  <my-component :clicks="clicks" @click="handleParentClick"></my-component>
</div>
<!-- 组件模板 -->
<template id="MyComponent">
  <div> 被点击了 <button>点击</button> </div>
</template>
<script>
  //  组件选项对象
  let MyComponent = {
    template: `#MyComponent`,
  }
  //  实例中注册组件 
  const vm = new Vue({
    el: "#app",
    components: {
      "MyComponent": MyComponent
    },
    methods: {
      handleParentClick() {
        // 11 不会打印 
        console.log(11);
      }
    }
  })
</script>

此时子组件上绑定的是自定义的事件不是原生的事件,
因为是自定义事件,我们就可以通过使用触发自定义事件的方式,来触发.
通过$emit 触发这个组件标签上的自定义事件

示例代码如下:

<div id="app">
  <!-- 使用组件 -->
  <!--  click 事件不会被当做DOM原生事件处理,只会被当做自定义事件处理-->
  <my-component @click="handleParentClick"></my-component>
</div>
<!-- 组件模板 -->
<template id="MyComponent">
  <div> 被点击了
    <!-- 1. 子组件通过原生click事件触发子组件自己的函数 -->
    <button @click="handleClick">点击</button>
  </div>
</template>
<script>
  //  组件选项对象
  let MyComponent = {
    template: `#MyComponent`,
    methods: {
      handleClick() {
        // 触发组件标签上自定义事件click
        this.$emit("click")
      }
    }
  }
  //  实例中注册组件
  const vm = new Vue({
    el: "#app",
    components: {
      "MyComponent": MyComponent
    },
    methods: {
      handleParentClick() {
        console.log(11);
      }
    }
  })
</script>

2、可以通过修饰符来处理组件标签上的原生事件

如果需要在子组件的dom上绑定原生的事件,而不是一个自定义事件该如何处理
可以通过 vue提供了修饰符.native来告知绑定的是原生的事件

示例代码如下:

<div id="app">
  <!-- 使用组件 -->
  <!-- 在组件标签上,如果需要使用原生事件,使用修饰符native, 这样vue就会把他当做原生事件处理了-->
  <my-component @click.native="handleParentClick"></my-component>
</div>
<!-- 组件模板 -->
<template id="MyComponent">
  <div> 被点击了 <button>点击</button> </div>
</template>
<script>
  //  组件选项对象
  let MyComponent = {
    template: `#MyComponent`,
  }
  //  实例中注册组件
  const vm = new Vue({
    el: "#app",
    components: {
      "MyComponent": MyComponent
    },
    methods: {
      handleParentClick() {
        console.log(11);
      }
    }
  })
</script


除注明外的文章,均为来源:老汤博客,转载请保留本文地址!
原文地址: