Vue父子组件传值

父组件代码:

<template>
    <div class="my_index">
        <!-- 文章详情 -->
        <artical-detail
          v-if="isShow"
          @getShow="getShow"
          :detail_title='detail_title'
          :detail_pic="detail_pic"
          :detail_content="detail_content"
        ></artical-detail>
    </div>
</template>

<script>
import articalDetail from "../articalDetail/articalDetail";
import axios from 'axios'
export default{
    name:'myIndex',
    data(){
        return{
            articalList:[],   // 文章详情
            isShow:false,   // 文章是否显示
            detail_title:'',
            detail_pic: '',
            detail_content: ''
        }
    },
    components:{
        articalDetail
    },
    methods:{
        // 获取文章信息
        getArticalInfo:function(res){
            res = res.data
            res.data.forEach((item,index,arr) => {
                this.articalList.push(item)
                // console.log(this.articalList)
            })
        },
        // 跳转到详情页
        toDetail:function (res) {
            this.isShow = true;   // 改变为文章详情显示
            // console.log(res.artical_title)
            this.detail_title = res.artical_title     // 设置title
            this.detail_pic = res.artical_pic         // 设置图片
            this.detail_content = res.artical_content   // 设置内容
        },
        // 子组件点击返回让文章详情隐藏
        getShow:function (data) {
            this.isShow = data
        }
    },
    mounted() {
        // axios请求文章列表
        axios({
            url:'***',
            methods:'get',
        }).then(this.getArticalInfo)
    }
}
</script>

子组件代码:

<template>
  <div class="detail">
    <div class="toBack">
      <p @click="toBack">返回</p>
    </div>
    <h1 class="detail_title">{{detail_title}}</h1>
    <img class="detail_pic" :src="detail_pic">
    <div class="detail_content">
      <p>{{detail_content}}</p>
    </div>
  </div>
</template>

<script>
    export default {
        name: "articalDetail",
        data(){
            return{
                isShow:false
            }
        },
        // 父组件传值给子组件,子组件通过props属性接收
        props:{
            detail_title:String,
            detail_pic:String,
            detail_content:String
        },
        methods:{
            // 子组件通过$emit传值给父组件
            toBack:function(){
                this.$emit("getShow",this.isShow)
            }
        }
    }
</script>

总结:

父组件给子组件传值:

父组件data中声明子组件需要的字段

父组件通过一个方法去到子组件,通过给该方法传参

改变父组件data中的声明的子组件需要的字段传给子组件的值

父组件中的子组件标签上绑定子组件需要的key值等于父组件data中传给子组件的key值

子组件中通过props属性接收,设置子组件需要的key值的数据类型

子组件中通过使用文本插值的方法将props属性中接收到的值渲染到页面


子组件给父组件传值:

子组件通过一个方法去到父组件

该方法中使用this.$emit方法,第一个参数为父组件的自定义事件第二个参数为传过去的值

父组件给自定义事件添加一个方法该方法中有一个参数,该参数为子组件传过来的值


说的可能不是很清楚,该篇博客是http://xueshuai.top中文章列表与文章详情之间的传值

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端薛小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值