上文中写了一个input组件,该组件需要复用,但是并不是每个组件都相同的

比如我定义了一个组件,是个矿泉水瓶子,这个瓶子分为大中小三个号,定义了三种瓶子的容积,定义了必须有瓶盖,瓶口,瓶子质地

但是瓶子的标签,瓶子的细节形状不同

因此瓶子不同的矿泉水生产商的550ml瓶子容积相同,瓶口相同,而品牌辨识度不同的原因

即,矿泉水瓶本身是一个接口,有基础定义

即,不同厂商的矿泉水瓶是该接口的实现,有具体实现定义

因此我对于上文中提到的input组件,定义了基础的style,定义了keyup事件,但是父组件在使用此组件的时候,可能有细节设置的不同

比如标题不同,说明不同,id不同等等

所以,子组件定义了接口,父组件使用,这里就会产生一些问题

1.组件之间的值得传递

  子组件获取自身的接口默认定义

  父组件为子组件静态定义值

  父组件为子组件动态定义值

  父组件获取子组件的接口值

  父组件对子组件的接口值得修改

  如何定义子组件的属性,如id,value,placeholder,type

  如何定义子组件的自定义属性,如自定义个labelText

  如何定义子组件的class

  如何定义子组件的style

  这里就是使用了子组件在定义的时候使用的props的相关功能

  具体介绍查询官网吧

2.具体代码如下

2.1.input组件的定义(子组件)

 <template>
<div class='div-input-out'>
<label>{{labelText}}</label>
<input class='div-input' type='text' :placeholder=pl :class='clazz' :style="{fontSize:fontSize+'px'}" v-model:value="value"
v-on:keyup='keyups'>
</div>
</template> <script>
/* eslint-disable */
// eslint-disable-next-line
export default {
props:       //定义props,为组件的属性,改属性可以是自定义属性,可以是element属性,可以是style,可以是class
       //定义props的目的为了让父组件能够获取该内容,该vue的props定义,相当于java中的接口,具体值可以在这里定义默认值,可以在父组件中再定义或修改
[       //未详细定义都为string类型的props,若要定义每种props的具体类型,使用json格式
'labelText',        //自定义一个label的内容
'pl',        //使用一个属性placeholder
'value',        //绑定一个值
'fontSize',        //绑定一个style,font-size改为fontSize格式,类似style都以此方式修改定义
'clazz',        //绑定一个class
],
name: 'div-input',       //组件的标签名
methods: {
keyups: function() {        //定义一个keyup函数
console.log(this._props.value);    //子组件中keyup函数中获取初始化的value
}
},
}
</script>
<style scoped>
/*固定的style,不进行修改的内容*/
.div-input-out {
margin: 10px;
} .div-input {
height: 25px;
width: 400px;
border-radius: 4px;
padding: 5px 20px;
outline: none;
}
</style>

2.2.input组件的调用和定义(父组件)

 注:父组件为子组件定义的class,必须是定义在子组件的style的scoped中的,定义在父组件的scoped中的并不起作用

 <template>
<div id='app'>
this is my first demo
<button v-on:click="testClick()">测试获取value</button>
<hr>
<!--复用组件-->
<!--复用组件: labelText动态赋值-->
<!--复用组件: pl静态赋值-->
<!--复用组件: value动态绑定-->
<!--复用组件: fontsize静态赋值-->
<!--复用组件: clazz动态赋值-->
<lyh-input :labelText='input01.labelText' pl='请输入01' :value='input01.value' :fontSize='22' :clazz='input01.clazz'></lyh-input>
<lyh-input :labelText='input02.labelText' pl='请输入02' :value='input02.value' :fontSize='16' :clazz='input02.clazz'></lyh-input>
</div>
</template> <script>
/* eslint-disable */
// eslint-disable-next-line
import lyhInput from './components/input' //导入lyhInput export default {
name: 'App',
data: function() {
return {
input01: { //第一个input
labelText: '第一个输入框的标题',     //动态赋值props属性
clazz: 'meClazz', //动态赋值clazz属性给class
value: '001', //动态赋值value
},
input02: {
labelText: '第二个输入框的标题',
clazz: 'meClazz',
value: '002',
},
}
},
methods: {
testClick: function() { //这里修改vue对象或属性
console.log(this.$children[0]);   //获取当前子组件vue对象
console.log(this.$children[1]);
console.log(this.$children[0].$props); //获取当前子组件props对象
console.log(this.$children[1].$props);
console.log(this); //获取当前vue对象
console.log(this.$el); //获取当前vue对象对应的element自身的dom对象
},
},
components: {
lyhInput,
}
}
</script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #2c3e50;
margin-top: 60px;
text-align: center;
}
</style>

各种绑定和获取方式都在代码和注释中了

3.相关效果的截图

注:

vue2.0以后去除了props的双重绑定功能,即禁止子组件在父组件调用中修改自身的props,因此也建议和官方的推荐一样使用,毕竟props的双向绑定会导致值得修改不明确

若必须需要双向绑定,网上有相应的解决方案,不贴了就。

建议定义好props以后,对props的修改只在父组件做。多数情况下,父组件需要修改子组件的props定义,说明该props不应该定义在子组件中,即该接口定义有误,或需要另一个组件

vue证明题五,组件传值与绑定的更多相关文章

  1. Vue证明题

    看来我需要对我的vue能力做一个证明了~~ 最近辞职了,又逢病重,找工作的时候发现对vue要求蛮高的,说会不行,还必须要有过vue的项目. 我这种半路出家的哪里来的vue的项目,公司又不是那种一线互联 ...

  2. Vue项目中同级组件传值的例子

    大家好,今天给大家带来Vue项目中同级组件之间传值的例子,父子组件之间的通信比较简单,这里不做讨论. 假设该项目中的需求如下: 图中左上角有一个按钮,我们的需求是点击它时,侧边导航栏收缩且主界面放大, ...

  3. vue 踩坑之组件传值

    Vue 报错[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the pa ...

  4. vue证明题一,vue全家桶的构成

    简单说下vue的构成,当然是简单为主,网上这东西满天飞,简单说几句就ok 1.vue是什么 vue读作view,是一种js框架.只关注于视图层,操作内容包括js,html,css 2.vue全家桶是什 ...

  5. vue证明题四,使用组件

    vue的开发方式,基本上是以组件为主的,至于为啥,我也不好去论述,网上看别人的 所谓渐进式开发,也是源自于单页面应用这一说,而注册一个域名以后,指定了首页,爬虫爬取链接都是从首页开始的 如果一个网址, ...

  6. vue的prop父子组件传值

    props down, events up 父组件通过 props 向下传递数据给子组件:子组件通过 events 给父组件发送消息. 静态 props 要让子组件使用父组件的数据,需要通过子组件的 ...

  7. vue 关于props 父组件传值

    swiper.vue  子组件 info.vue 父组件 swiper.vue<template> <div class="swiper-wrap" @mouse ...

  8. vue证明题三,vue项目的包结构和配置

    用vue-cli创建的项目带有自动配置好的包结构,包结构都是固定的. 关于详细的解释,网上多得是,只说下最重要的内容 1.vue项目包结构和端口号配置 这里笔者下了个HBuilderX来写代码. 2. ...

  9. vue中的父组件传值给子组件

    以上父组件以及父组件里面的代码 下面是子组件以及里面的代码

随机推荐

  1. Backend事后诸葛亮

    事后诸葛亮 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件想解决初学编程语言的入门困难.定义的不算太清楚,没有仔细地调查用户入门的困难之处. ...

  2. linux性能分析工具Swap

  3. 121-基于TI DSP TMS320DM8148的全高清1080P 60fs的视频编解码系统 机器人主板

    基于TI DSP TMS320DM8148的全高清1080P 60fs的视频编解码系统 一.板卡概述 本系统基于最先进的DSP技术,构建一个全高清的视频编解码系统,采用TI的芯片.借助TI的DaVin ...

  4. django框架常用的数据库迁移命令

    python manage.py makemigrations 默认所有修改过的model层转为迁移文件 python manage.py migrate   默认将所有的迁移文件都执行,更新数据库 ...

  5. mysql02---客户端与服务器模型

    目录 一.客户端与服务器模型 连接MySQL方式 总结: 二.MySQL服务器构成 三.MySQL的结构 一.客户端与服务器模型 1.mysql是一个典型的C/S服务结构 1.1 mysql自带的客户 ...

  6. python 获取文件行数

    #如果要统计文件的行数,可以这样写: count = len(open(filepath, 'r').readlines()) #这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作. #可以利用 ...

  7. QT中视图(setViewport)和窗口(setWindow) 小总结

    参考博客: https://blog.csdn.net/weixin_39583140/article/details/92798127 https://blog.csdn.net/u01244271 ...

  8. Raspbian 在虚拟机上运行,运行Flask,供宿主机访问

    Raspbian 在虚拟机上运行,启动Flask,供宿主机访问 参考ref 1, 在virtualbox上跑起来Raspbian OS 参考ref 2, 在Raspbian上安装并运行Falsk, 注 ...

  9. spring-boot整合Mybatis案例(注解方式)

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springBo ...

  10. k-近邻算法(kNN)准备数据:归一化数值

    #准备数据:归一化数值 def autoNorm(dataSet): #autoNorm()函数可以自动将数字特征值转换为0到1的区间 minVals = dataSet.min(0) maxVals ...