vue 子页面怎么调用父页面的方法

摘要:
vue中高级vue组件的提供/注入可以通过vue中的不同组件进行通信,如下所示:1.通过prop2.通过vuex或根vue加载器的非父子组件通常是上述两种情况。然而,有一种特殊情况,即孙子组件或更深层的组件。1.以下是a.vue2.以下是son.vue˂

vue 子页面怎么调用父页面的方法第1张vue 子页面怎么调用父页面的方法第2张vue 子页面怎么调用父页面的方法第3张

vue 子页面怎么调用父页面的方法第3张

vue高级组件之provide / inject

在vue中不同组件通信方式如下

1.父子组件,通过prop

2.非父子组件,通过vuex或根vue转载器

 通常是以上两种情况,然而还有一种比较特殊的情况,即孙子组件或更深层次的组件通信

1.下面是a.vue

  1.  
    <template>
  2.  
    <div class="test">
  3.  
    <son prop="data"></son>
  4.  
    </div>
  5.  
    </template>

2.下面是son.vue

  1.  
    <template>
  2.  
    <div>
  3.  
    <grandson prop="data"></grandson>
  4.  
    </div>
  5.  
    </template>
  6.  
     
  7.  
    <script>
  8.  
    export default {
  9.  
    name: 'Son',
  10.  
    props: ['data'],
  11.  
    }
  12.  
    </script>

很容易看出,如果父组件需要与grandson通信,除了vuex,必须先与son组件通信,再由son与grandson通信,在层级比较少的情况下也无可厚非,但是层级一旦多起来是很可怕的

有人会问为什么不用vuex,简单省事,有很多为了这个引入vuex会导致代码性价比比较低,项目本身没有使用vuex的必要

那么这种情况下provide / inject就登场了

1.provide就相当于加强版父组件prop

2.inject就相当于加强版子组件的props 

因为以上两者可以在父组件与子组件、孙子组件、曾孙子...组件数据交互,也就是说不仅限于prop的父子组件数据交互,只要在上一层级的声明的provide,那么下一层级无论多深都能够通过inject来访问到provide的数据

1.父级组件如下

  1.  
    <template>
  2.  
    <div class="test">
  3.  
    <son prop="data"></son>
  4.  
    </div>
  5.  
    </template>
  6.  
     
  7.  
    <script>
  8.  
    export default {
  9.  
    name: 'Test',
  10.  
    provide: {
  11.  
    name: 'Garrett'
  12.  
    }
  13.  
    }

 2.孙子组件,注意这里是孙子组件,父级 -> 子组件 -> 孙子组件三个层级关系

  1.  
    <template>
  2.  
    <div>
  3.  
    {{name}}
  4.  
    </div>
  5.  
    </template>
  6.  
     
  7.  
    <script>
  8.  
    export default {
  9.  
    name: 'Grandson',
  10.  
    inject: [name]
  11.  
    }
  12.  
    </script>

这里可以通过inject直接访问其两个层级上的数据,其用法与props完全相同,同样可以参数校验等

缺点

这么做也是有明显的缺点的,在任意层级都能访问导致数据追踪比较困难,不知道是哪一个层级声明了这个或者不知道哪一层级或若干个层级使用了,因此这个属性通常并不建议使用能用vuex的使用vuex,不能用的多传参几层,但是在做组件库开发时,不对vuex进行依赖,且不知道用户使用环境的情况下可以很好的使用

免责声明:文章转载自《vue 子页面怎么调用父页面的方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇文本格式ANSI,Unicode等有什么区别MySQL用户权限验证与管理方法详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue.js-详解三大流行框架VUE_快速进阶前端大咖-Vue基础

作者 | Jeskson 来源 | 达达前端小酒馆 Vue概述: MVX模式简介,Vue框架简介,Vue.js的安装与使用。 Vue基础语法: 实例对象,生命周期,模板语法,计算属性,methods方法 Vue渲染: 列表渲染,条件渲染 Vue事件与表单: 事件处理,事件对象,事件委派,表单处理 MVX模式简介:MVX框架模式:MVC+M...

VSCode拓展插件推荐

大牛VSCode拓展插件推荐 https://link.juejin.im/?target=https%3A%2F%2Fgithub.com%2FvarHarrie%2FDawn-Blossoms%2Fissues%2F10   1、配置:个人的VSCode首选项配置(文件-首选项-设置)     { "editor.tabSize": 2, "file...

vue导出excel文件损坏

export function downloadFile(obj, name, suffix = "xlsx") { const url = window.URL.createObjectURL(new Blob([obj], {type: "application/vnd.ms-excel"})) const link = document.cr...

vue之v-if和v-show

v-if v-if主要用来进行条件渲染。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>vue</title> <script src="./vue....

vue 中的 .sync 修饰符 与 this.$emit('update:key', value)

vue 中 .sync 修饰符,是 2.3.0+ 版本新增的功能 在有些情况下,我们可能需要对一个 prop 进行“双向绑定”。不幸的是,真正的双向绑定会带来维护上的问题,因为子组件可以变更父组件,且在父组件和子组件两侧都没有明显的变更来源。 这也是为什么我们推荐以update:myPropName的模式触发事件取而代之。举个例子,在一个包含titlepr...

vue使用watch监听实现即时搜索功能

<template> <div> vue使用watch监听实现类似百度搜索功能 <div> <input type="text" placeholder="搜索" v-model.trim='keyword' /> </...