组件之间的传值

组件是一个单独功能模块的封装,有属于自己的data和methods,一个组件的 data 选项必须是一个函数

为什么必须是函数:因为只有当data是函数时,不同实例调用同一个组件时才会开辟新空间,互不干扰

data() {
return {
count: 0
}
}

父子组件区分

    <div id="app">
<cpn> </cpn>
<cpn1></cpn1>
</div>
<script>
//子组件
const childCpn = Vue.extend({
template: `
<div>
<h3>我是局部组件,也是子组件</h3>
</div>
` })
// 父组件
const parentCpn = Vue.extend({
template: `
<div>
<h2>我是局部组件,也是父组件</h2>
<!-- 使用子组件 -->
<cpn1></cpn1>
</div>
`,
components:{
cpn1: childCpn //在父组件中注册子组件
}
})
let app = new Vue({
el:"#app",
data:{ },
components:{
cpn : parentCpn,
cpn1 : childCpn //若想在实例中使用子组件也需要在实例中注册
},
})
</script>

父传子

Prop 是可以在组件上注册的一些自定义属性,prop值可以是属性也可以是方法,最终都会出现在子组件的实例上供子组件直接调用

一个组件默认可以拥有任意数量的 prop,任何值都可以传递给任何 prop ,在组件实例中可以直接访问这个值,就像访问 data 中的值一样

<body>
<!--vue实例需要一个根组件div-->
<div id="app">
<ul>
<!--使用组件-->
<tokyo v-for="item in names " :first-name="item"></tokyo>
</ul>
</div> <script type="text/javascript">
//注册组件
Vue.component('tokyo',{
props:['firstName'], //属性
template:'<li>名字:<h3>{{firstName}}</h3></li>' //模板
})
//vue实例
const app = new Vue({
el:'#app',
data:{
names:['lixiang','wanzi'],
}
})
</script>
</body>

命名方式:

组件名:组件名如果是多个单词时,首字母大写或者加横线都可以。MyComponentName 或my-component-name

若使用首字母大写的方式注册,使用时两种方式都可

prop参数:camelCase (驼峰命名法) 的 prop 名需要使用其等价的 kebab-case (短横线分隔命名) 命名,在子组件内部命名方式不变,绑定父组件属性时要改驼峰命名

为短横线连接

语法

父传子分离写法

 <!--父组件模板-->
<div id="app">
<!--使用子组件,v-bind绑定父组件属性给子组件props属性-->
<cpn v-bind:ctitle="title" :cname="names" ></cpn>
</div>
<!--子组件模板-->
<template id="cpnTemplate">
<div>
<h3>{{ctitle}}</h3>
<ul>
<li v-for="item in cname"> <p>{{item}}</p> </li>
</ul>
</div>
</template>
<script> //注册子组件
const cpn ={
template:"#cpnTemplate",
props:['cname','ctitle'],
data(){
return{}
},
methods:{
}
}
//注册父组件
let app = new Vue({
el:"#app",
data:{
names:['丸子','莉香','三上'],
title:'hello'
},
components:{
// cpn:cpn
cpn //标签名和组件名相同时可简写为cpn
}
})
</script>

vue-cli项目组件写法

1、定义组件

<template>
<div>
<h3>{{ctitle}}</h3>
<ul>
<li v-for="item in cname"> <p>{{item}}</p> </li>
</ul>
</div>
</template>
<script>
export default {
name: "tokyoLoveStory",
components: {},
mixins: [],
props:['cname','ctitle'],
data(){
return{}
},
methods:{
}
};
</script>

2、使用组件

<template>
<!--使用组件时,需变驼峰为短横线-->
<tokyo-love-story v-bind:ctitle="title" :cname="names"></tokyo-love-story>
</template> <script>
import tokyoLoveStory from 'xxx/tokyoLoveStory'
export default{ data(){
names:['丸子','莉香','三上'],
title:'hello'
} ,
components:{
tokyoLoveStory
},
methods:{
...
},
...
}
</script>

props另一种书写形式:

 props:{
cname:'',
ctitle:'',
//基础类型
propA:Number,
//多个可能的类型
propB:[String,Number],
//必填的字符串
propC:{
type:Number,
required:true
},
//带有默认值的字符串
propD:{
type:Number,
default:100
},
//对象或数组默认值必须是一个函数,返回值是[]或{}
propE:{
type:Object,
default: function () {
return [];
}
}

子组件向父元素传值

想要子组件的数据传递给父元素,需要自定义触发事件,实现数据的传值。

子组件可以通过调用内建的 $emit 方法并传入事件名称来触发一个事件

<body>
<!--vue实例需要一个根组件div-->
<div id="app">
<ul>
<!--使用组件,绑定props属性,子组件的触发事件调用父元素方法达到传递参数的目的-->
<tokyo v-for="item in names "
:first-name="item"
:parentMethod="parentMethod"
@emitevent="emitName">
</tokyo>
</ul>
<h3>选中的姓名是:{{chooseName}}</h3>
</div> <script type="text/javascript">
<!--注册组件-->
Vue.component('tokyo',{
props:['firstName'],
template:'<li>名字:<h3>{{firstName}}</h3> ' +
' <button @click="chooseEvent(firstName)">点击传递姓名</button></li>',
methods:{
chooseEvent(firstName){
console.log(firstName);
//触发父元素中emitevent事件,并传递firstName参数给该事件
this.$emit('emitevent',firstName);
}
parent(){
this.parentMethod() //parentMethod()在子组件实例中,可直接调用
}
} })
const app = new Vue({
el:'#app',
data:{
names:['莉香','丸子','三上','里美'],
chooseName:''
},
methods:{
//父元素被触发的事件,name为子组件传递过来的参数,赋给父元素的data:{}中的属性
emitName(name){
console.log("被触发事件");
this.chooseName = name;
},
parentMethod(){
console.log("parentMethod")
}
}
})
</script>
</body>

组件通过props属性传值的更多相关文章

  1. 创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    1.创建组件的方法   函数组件   class组件 1.1 函数组 无状态函数式组件形式上表现为一个只带有一个 `render()` 方法的组件类,通过函数形式或者 `ES6` 箭头 `functi ...

  2. React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...

  3. 组件的props属性和state状态

    props属性: 我使用代码来说明React中props属性: // Profile.jsx import React from 'react' ; export default Class Prof ...

  4. 【Vue】组件watch props属性值

    转载: https://www.cnblogs.com/mqxs/p/8972368.html #HTML <div id="example"> <p> & ...

  5. Vue.js 源码分析(十三) 基础篇 组件 props属性详解

    父组件通过props属性向子组件传递数据,定义组件的时候可以定义一个props属性,值可以是一个字符串数组或一个对象. 例如: <!DOCTYPE html> <html lang= ...

  6. 简述在Vue脚手架中,组件以及父子组件(非父子组件)之间的传值

    1.组件的定义 组成: template:包裹HTML模板片段(反映了数据与最终呈现给用户视图之间的映射关系) 只支持单个template标签: 支持lang配置多种模板语法: script:配置Vu ...

  7. 深入理解Vue父子组件通讯的属性和事件

    在html中使用元素,会有一些属性,如class,id,还可以绑定事件,自定义组件也是可以的.当在一个组件中,使用了其他自定义组件时,就会利用子组件的属性和事件来和父组件进行数据交流. 父子组件之间的 ...

  8. vue.js 父子组件间 props 数据同步处理

    常见的场景: 在一个vue组件A中,使用另外一个组件B.A将自己的数据通过B组件的Props属性(propX)传递到B组件实例内部,B组件内部会修改该Props属性(propX)的值,此时在A组件内部 ...

  9. React Native组件、生命周期及属性传值props详解

    创建组件的三种方式 第一种:通过ES6的方式创建 /** * 方式一 :ES6 */ export default class HelloComponent extends Component { r ...

随机推荐

  1. 定要过python二级 第11套

    1. 2.乃至好的代码片段与解决方法,我保存在了 H:盘中python中的:H:\python\python二级好的代码片段与错误解决 3.接着第一个点,为什么print(read(f))  把f 放 ...

  2. c++ 的学习 第3集-默认参数

    1.默认参数的意思就是  予以形参默认值 2. C++允许函数设置默认参数,在调用时可以根据情况省略实参.规则如下: 默认参数只能按照右到左的顺序 如果函数同时有声明.实现,默认参数只能放在函数声 ...

  3. 华为云计算IE面试笔记-eBackup有哪几种备份组网方式,各备份组网方式主要的应用场景及备份流程?

    应用场景: LAN-Base一般用于备份数据量小,且对备份窗口没有特殊要求的场景,此类场景下备份服务器和备份代理一般是虚拟机部署. LAN-Free一般用于备份数据量较大,且对备份窗口要求比较严格的场 ...

  4. 淘宝商品html--网页结构

    淘宝商品html--网页结构 本篇爬虫紧接上一篇关于 泸州老窖 的爬虫随笔: import re import json def get_space_end(level): return ' ' * ...

  5. docker之swarm容器部署及运维

    1.概念 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机. Docker Swarm 提供了标准的 Docker API,所有 ...

  6. 暑期 2021 | Serverless Devs 最全项目申请攻略来啦!

    Serverless 是近年来云计算领域热门话题,凭借极致弹性.按量付费.降本提效等众多优势受到很多人的追捧,各云厂商也在不断地布局 Serverless 领域.但是随着时间的发展,Serverles ...

  7. ls命令剖析

    目录 ls命令剖析 资料翻译 SYNOPSIS 使用方式 DESCRIPTION 说明 参数的说明 -l 参数字符的解释 文件权限的解释 FILES 文件夹 实战演练 ls 命令 ls -l 命令 l ...

  8. Apache Dubbo理解和应用

    官网:https://dubbo.apache.org/ slogan:高性能.轻量级的开源Java RPC框架 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和 ...

  9. Johnson 全源最短路径算法学习笔记

    Johnson 全源最短路径算法学习笔记 如果你希望得到带互动的极简文字体验,请点这里 我们来学习johnson Johnson 算法是一种在边加权有向图中找到所有顶点对之间最短路径的方法.它允许一些 ...

  10. Frida高级逆向-Hook Native(Java So)2

    Frida Hook So 一些操作说明 Native方法第一个参数是 JNIEnv *env 如何在Frida中获取 JNIEnv 对象呢? Java.vm.getEnv(); 如何将string类 ...