【Vue2】父子组件传参 && 孙子调用爷爷的方法 provide inject

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。【Vue2】父子组件传参 && 孙子调用爷爷的方法 provide inject,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一. 父传子

  1. 父组件先在data中定义要传给子组件的属性名
  2. 父组件在中引入子组件
  3. 在components中注册
  4. 使用步骤 3 中注册好的子组件
  5. 在 3 中,父传子
    (1)利用 : 将父组件的对象、数组、字符串等传给子组件,供子组件使用
    (2)利用 @ 将父组件的方法传给子组件,供子组件调用
 :子组件接收父组件时用的属性名 =  父组件要传给子组件的属性名
 @子组件接接收父组件使用的方法 = 父组件要传给子组件使用的方法

二. 子用父

  1. 接受通过:传的值,通过 props
    若为字符串和数组,如下
 props:{
 	子组件接收父组件时用的属性名:{
 		type:String,
 		default:''
 	}
 }
 
或直接 props:{'子组件接收父组件时用的属性名'}
 props:{
 	子组件接收父组件时用的属性名:{
 		type:Array,
 		default:()=>{}
 	}
 }
 
或直接 props:{'子组件接收父组件时用的属性名'}

这里切记:通过props接受到的值是不能改变的,如果要改变只能重新再子组件定义,然后通过watch将父组件的值传给该定义好的属性,即可渲染

 watch:{
	子组件接收父组件时用的属性名(){
		this.子组件定义的属性名 = this.子组件接收父组件时用的属性名
    }
 }
  1. 接受通过@传的方法,通过this.$emit(“父组件要传给子组件使用的方法
    “,参数)
  子组件调用接口后,需刷新页面。参数可传可不传
  this.$emit("父组件要传给子组件使用的方法",参数)

三. 举例

  1. 父传子模块
<template>
	<div>
		<h1>我是父辈的组件</h2>
		<el-table :data="grandpaList" border>
			<el-table-column fixed  prop="date" label="日期"  width="150" />
			<el-table-column fixed  prop="name" label="姓名"  width="150" />
			<el-table-column fixed  prop="address" label="籍贯"  width="150" />
			<el-table-column label="操作">
				<template slot-scope="scope">
					<el-button @click="handleViewDetail">详情</el-button>
				</template>
			</el-table-column>
		</el-table>
		<!-- 4. 使用注册的子组件 并执行步骤5. 父传参给子-->
		<ChildDetail ref="fatherDetail" :show.sync="viewFatherDialog" @fetchData="fetchData">
	</div>
</template>
<script>
// 2. 引入子组件
import ChildDetail from "./components/ChildDetail.vue"
import {getList} from "@/api/具体的接口路径"
	export default{
		// 3. 注册子组件
		components:{ChildDetail},
		data(){
			return{
				grandpaList:[],
				viewFatherDialog:false,  // 1. 定义属性名
			}
		},
		mounted(){
			this.fetchData()
		},
		methods:{
			fetchData(){
				getList(传的参数).then(res=>{
					this.grandpaList = res.data
				})
			}
		}
	}
</script>
  1. 子用父模块
<template>
	<div>
		<el-dailog  title="我是子辈的组件"  :visible.sync="dialogVisible">
 			<span>这是一段信息</span>
  			<span slot="footer" class="dialog-footer">
  			    <el-button @click="close">取 消</el-button>
    			<el-button type="primary" @click="handleSubmit">确 定</el-button>
  </span>
		</el-dailog>
	</div>
</template>
<script>
	export default{
	// 1. 接受通过` : `传的值,通过 `props`
		props:{show},
		data(){
			return{
				dialogVisible:false,
			}
		},
		// props接受到的值要改变,只能用watch
		watch:{
			show(){
				this.dialogVisible = this.show
			}
		},
		methods:{
			close(){
			},
			handleSubmit(){
				submit(传的参数).then(res=>{
				// 3. 提交(新增/编辑/删除)后一般需刷新页面
					this.$emit("fetchData")
				})
			}
		}
	}
</script>

四. 爷孙调用

  1. 先使用 provide抛出去
    在这里插入图片描述
  2. 孙子使用 inject接收
    在这里插入图片描述
  3. 接收后可在孙子辈的组件直接 this.爷爷辈的方法()即可

若inject:[‘方法名报错’],则可更改为

inject:{
  getList:{value:"getList",default:null}
}

五. 参考附录

  1. 爷孙:如何传参
  2. inject[‘方法名报错’]:如何解决

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/194979.html

(1)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!