【Vue】【子组件】调用【父组件】参数,props属性值【动态】调用的两种方法(图文+完整代码)

 一、props简易型

1、Student.vue

props:["name1","name2","name3"]

<template>
  <!-- 组件一 -->
  <div class="demo">
    <h2>---------【Student.vue】---------</h2>
    <h2>入取该校第1名学生:{{ name1 }}</h2>
    <h2>入取该校第2名学生:{{ name2 }}</h2>
    <h2>入取该校第3名学生:{{ name3 }}</h2>
    <button @click="showName">点我提示第一名学生</button>
  </div>
</template>

<script>
// 把组件暴露出去,方便引入  Vue.extend可以省略
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name:"Student",
  data() {
    return {

    };
  },
  methods: {
    showName() {
      alert(this.name1);
    },
  },
  props:["name1","name2","name3"]

};

</script>

 
<style>
.demo {
  background-color: rgb(231, 231, 231);
  border: 1px rgb(172, 172, 172) solid;
}
</style>

2、App.vue

<template>
  <div>
    <!-- <Student></Student> -->
    <Student name1="貂蝉" name2="吕布" name3="关羽" ></Student>
    <Student name1="唐僧" name2="观音" name3="如来" ></Student>
  </div>
</template>

<script>
// 引入组件
import Student from './components/Student.vue'
// 注册组件
export default {
  name: "App",
  components: {
    Student
  },
};
</script>

3、index.html

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <div id="app"></div>
  </body>
</html>

二、props完整型

 1、Student.vue

 props: {

    name1: {

      type: String, // name1的类型是字符串

      required: true, // name1是必须有值

      default:"#请输入姓名#" // 默认值

    },

}

<template>
  <!-- 组件一 -->
  <div class="demo">
    <h2>---------【Student.vue】---------</h2>
    <h2>入取该校第1名学生:{{ name1 }}</h2>
    <h2>入取该校第2名学生:{{ name2 }}</h2>
    <h2>入取该校第3名学生:{{ name3 }}</h2>
    <button @click="showName">点我提示第一名学生</button>
  </div>
</template>

<script>
// 把组件暴露出去,方便引入  Vue.extend可以省略
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name: "Student",
  data() {
    return {};
  },
  methods: {
    showName() {
      alert(this.name1);
    },
  },
  props: {
    name1: {
      type: String, // name1的类型是字符串
      required: true, // name1是必须有值
      default:"#请输入姓名#" // 默认值
    },
    name2: {
      type: String, // name1的类型是字符串
      required: true, // name1是必须有值
      default:"#请输入姓名#" // 默认值
    },
    name3: {
      type: String, // name1的类型是字符串
      required: false, // name1是必须有值
      default:"#请输入姓名#" // 默认值
    },
  },
};
</script>

 
<style>
.demo {
  background-color: rgb(231, 231, 231);
  border: 1px rgb(172, 172, 172) solid;
}
</style>

2、App.vue

<template>
  <div>
    <!-- <Student></Student> -->
    <Student name1="貂蝉" name2="吕布"  ></Student>
    <Student  name2="观音" name3="如来" ></Student>
  </div>
</template>

<script>
// 引入组件
import Student from './components/Student.vue'
// 注册组件
export default {
  name: "App",
  components: {
    Student
  },
};
</script>

3.index.html 同上

三、通过Data动态修改或绑定props的属性值

  1、Student.vue

注意:以下三个地方

<template>
  <!-- 组件一 -->
  <div class="demo">
    <h2>---------【Student.vue】---------</h2>
    <h2>入取该校第1名学生:{{ m_Name1 }}</h2>
    <h2>入取该校第2名学生:{{ m_Name2 }}</h2>
    <h2>入取该校第3名学生:{{ m_Name3 }}</h2>
    <button @click="showName">点我修改学生姓名</button>
  </div>
</template>

<script>
// 把组件暴露出去,方便引入  Vue.extend可以省略
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name: "Student",
  data() {
    return {
      m_Name1: this.name1,
      m_Name2: this.name2,
      m_Name3: this.name3,
    };
  },
  methods: {
    showName() {
      this.m_Name1 = "唐僧";
      this.m_Name2 = "观音";
      this.m_Name3 = "如来";
      

      // alert(this.name1);
    },
  },
  props: {
    name1: {
      type: String, // name1的类型是字符串
      required: true, // name1是必须有值
      default: "#请输入姓名#", // 默认值
    },
    name2: {
      type: String, // name1的类型是字符串
      required: true, // name1是必须有值
      default: "#请输入姓名#", // 默认值
    },
    name3: {
      type: String, // name1的类型是字符串
      required: false, // name1是必须有值
      default: "#请输入姓名#", // 默认值
    },
  },
};
</script>

 
<style>
.demo {
  background-color: rgb(231, 231, 231);
  border: 1px rgb(172, 172, 172) solid;
  height:280px;
  width:400px;
  padding-left: 10px;
}
.demo button{
  height: 40px;
  width: 200px;
font-size: 18px;
}
</style>

2、App.vue

<template>
  <div>
    <!-- <Student></Student> -->
    <Student name1="貂蝉" name2="吕布" name3="关羽" ></Student>
  </div>
</template>

<script>
// 引入组件
import Student from './components/Student.vue'
// 注册组件
export default {
  name: "App",
  components: {
    Student
  },
};
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue组件可以通过两种方式调用组件方法和传递参数。 第一种方式是使用$emit方法组件可以通过this.$emit("组件传递过来的函数","组件数据")来触发组件函数。在组件方法,可以使用this.$emit方法来触发组件传递过来的函数,并通过参数传递组件的数据。例如,在组件的template可以使用<button @click="childFun">组件按钮</button>来调用组件方法childFun,在childFun方法使用this.$emit("fatherMethod","组件数据")来触发组件方法,并传递组件的数据。 第二种方式是使用$parent属性组件可以通过this.$parent.parentFun来调用组件方法。在组件方法,可以使用this.$parent.parentFun来调用组件方法,并传递组件的数据。例如,在组件的template可以使用<button @click="childFun">组件按钮</button>来调用组件方法childFun,在childFun方法使用this.$parent.parentFun("组件数据")来调用组件方法。 所以,组件可以通过上述两种方式来调用组件方法并传递参数。这样能够实现组件组件之间的数据传递和交互。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue组件怎么调用组件方法 Vue组件调用组件函数的三种方法](https://blog.csdn.net/qq_45466204/article/details/126232074)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue 组件调用组件函数的方法](https://download.csdn.net/download/weixin_38659159/12941063)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

敦厚的曹操

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

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

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

打赏作者

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

抵扣说明:

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

余额充值