上文中写了一个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. Linux学习笔记2-CentOS7安装tomcat8

    1.下载tomcat:apache-tomcat-8.5.16.tar.gz 下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat ...

  2. source insight 4.0.86.0安装破解问题

    source insight 4.0.86.0安装过程中碰到导入lic文件一直不正确 解决办法: 需要将SourceInsight\SW_Install\SI4安装及破解文件 目录下的sourcein ...

  3. AbstractQueuedSynchronizer简单使用

    AQS是JUC中很多同步组件的构建基础,简单来讲,它内部实现主要是状态变量state和一个FIFO队列来完成,同步队列的头结点是当前获取到同步状态的结点,获取同步状态state失败的线程,会被构造成一 ...

  4. TP、FP、FN、TN的含义

    true positive(被正确分类的正例) false negative(本来是正例,错分为负例) true negative(被正确分类的负例) false positive(本来是负例,被错分 ...

  5. JS中JSON.stringify()方法,将js对象(json串)转换成字符串,传入服务器

    JSON 通常用于与服务端交换数据. 在向服务器发送数据时一般是字符串. 我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串. 语法 JSON.string ...

  6. List和Tuple的中的method对比

  7. boost location-independent times

    The class boost::posix_time::ptime defindes a location-independent time. It uses the type boost::gre ...

  8. Angular JS - 6 - Angular JS 常用指令

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. CSS布局浮动和定位属性的区别

    float: left|right; 可以自动排列自动折行, 但需要clear来配合清除浮动;display: inline-block 有些时候可以替代float实现相同的效果. position: ...

  10. django中常见命令总结

    一,创建一个django项目: django-admin.py startproject mysite二,在mysite目录下创建blog应用: python manage.py startapp b ...