vue组件间通讯方法1:props
首页->学习资料->web前端->vue教程->vue2 关键词: 发布时间:2024-01-04 01:29:19 浏览次数:345

image.png

代码地址:

vue_study/vue2-cli/src/components/66 at master · hurong241/vue_study (github.com)


App.vue

<template>
  <div class="app">
    <div>
      vue props属性:组件间参数传递及数据验证<br/>
      场景:如A写了一个组件,B也想用,但是参数不一样,那B用A组件的时候可以传参过去<br/>
      eg:这里有个school.vue中要用到student.vue,但是学生所在班级不同,需要传数据过去<br/>
      注意:此时student.vue中不能定义data,它的数据从props接收<br/>
      <hr/>
    </div>
    <School></School>
  </div>
</template>

<script>
//引入组件
import School from "./components/66/School.vue";

export default {
  name: 'App',
  components: {
    School,
  }
}
</script>

<style>
.app {
  background-color: #999;
  padding: 10px;
}
</style>



School.vue

<template>
  <div>
    <!--语法检查:所有有模板内容都应该放在最外层的div内-->
    <p>名称:{{ school.name }}</p>
    <p>地址:{{ school.address }}</p>
    <hr/>
    <!--
    通过组件传参:
    假如接收方显示count等于此处传过去的count+1,则要在count前加:号,
    不然传过去的是个字符,计算错误,如:传的2,期望结果是2+1=3,实际显示的是字符串21
    测试结果是如果传的不是string貌似都要加:
    -->
    <Student className="二年级" :count="count" :students="students"></Student>
  </div>
</template>

<script>
import Student from './Student.vue'

export default {
  name: 'MySchool',//名称格式示例要2个词组成首字母大写:MySchool
  components: {
    Student
  },
  data() {
    return {
      count:3,
      school: {
        'name': '清华',
        'address': '北京'
      },
      students: [
        {id: 1, name: '李四', sex: '男', age: 39},
        {id: 2, name: '王五', sex: '女', age: 42},
        {id: 3, name: '张三', sex: '女', age: 32},
      ]
    }
  },
  methods: {}
}
</script>

<style>

</style>


Student.vue

<!--组件的结构-->
<template>
  <div>
    <dl>
      <dt>{{ className }}学生信息,共有{{ count + 1 }}个学生</dt>
      <dd v-for="(s) in students" :key="s.id">
        {{ s.id }}-{{ s.name }}-{{ s.sex }}-{{ s.age }}
        <button @click="showId(s.id)">弹出id</button>
      </dd>
    </dl>
  </div>
</template>

<!--组件的交互代码:数据\方法-->
<script>
export default {
  //组件名称,这个名称仅是给vue插件中显示用的
  name: 'my-student',
  //组件数据:由于数据是从props接收的,这里不能定义数据
  // data() {
  //   return {
  //     className:'一年级',
  //     students: [//数组中的对象操作
  //       {id: 1, name: '李四', sex: '男', age: 39},
  //       {id: 2, name: '王五', sex: '女', age: 42},
  //     ]
  //   }
  // },
  //组件方法
  methods: {
    showId(value) {
      alert(value)
    }
  },
  //接收School传过来的数据
  //简写方式1:只定义参数名称
  //props:['className'],
  //简写形式2:定义参数名及数据类型
  // props:{
  //   className:String,
  // },
  //完整写法:参数、类型、是否必须等
  props: {
    className: {
      type: String,
      required: true,
      default: '一年级',
    },
    count: {
      type: Number,
      require: true,
      default: 0,
    },
    students: {}
  }
}

</script>

<!--样式-->
<style>
dt {
  color: red;
}
</style>


赞:(0)
踩:(0)
相关文章
初识vue
数据绑定:第一个vue例子
vue模板语法
vue数据绑定
el与data的两种写法/延迟挂载
vue数据代理-Object.definePropert
vue事件及事件修饰符prevent/stop/
vue计算属性computed
vue(深度)监视属性watch
vue绑定样式:class,:style
热门文章
win7中将文件拷贝到虚拟机linux下
phpexcel设置行高及列宽,背景颜色,
rabbitmq无法启动
intellij idea不显示git push按钮
php7中使用mongodb的aggregate进行
laravel页面静态化的方法
centos7.4 64位下swoole安装及配置
navicate连接mycat报1184错误
curl设置超时不起作用(CURLOPT_TIM
devops-jenkins容器为pending状态
好评文章
phpexcel设置行高及列宽,背景颜色,
php7中使用mongodb的aggregate进行
intellij idea打开文件所在文件夹
windows下使用MongoDB Compass Com
win7中将文件拷贝到虚拟机linux下
laravel 中悲观锁 & 乐观锁的使用
单点登录sso原理及php实现方式及de
navicate连接mycat报1184错误
rabbitmq无法启动
laravel整合dingo/api方法步骤:jwt
标签
rabbitmq mysql备份 elasticsearch golang swoole
我的项目
【github】www.github.com/hurong241
【码云】gitee.com/hu_rong/projects
【docker hub】hub.docker.com/repositories/hurong241
【packagist】packagist.org/users/hurong241/packages
站点信息
建站时间:2011年
文章数:623篇
浏览数:1306209
粤ICP备18028092号-1  微信:hurong241