上文中写了一个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. KVC、KVO 理解

    参考经典链接: https://www.jianshu.com/p/f8198ca5e682 https://www.jianshu.com/p/be80318115a7 一. KVC 1.KVC介绍 ...

  2. Windows下svn使用教程

    SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...

  3. shell命令结果重定向

  4. 3.VUE前端框架学习记录三:Vue组件化编码1

    VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  5. MVC模式设计的Web层框架初识

    struts是个什么东西? struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类 ...

  6. JAVA代码覆盖率采集与分析方案

    原文地址-> http://m.blog.csdn.net/article/details?id=48688763

  7. 51nod 1836:战忽局的手段(期望)

    题目链接 公式比较好推 精度好难搞啊@_@ 下面记笔记@_@ ****在CodeBlocks中,输出double型变量要使用%f (参见http://bbs.csdn.net/topics/39193 ...

  8. Java Web学习总结(12)Filter过滤器

    一,Filter简介 Filter也称之为过滤器,Filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理. 二,Filter开发步骤 1)编写一个 ...

  9. mybatis 动态Sql的模糊查询

    where teacher.tname like concat(concat(#{tName}),'%') 2:distinct的使用 下面先来看看例子: table    id name    1 ...

  10. 4412 GPIO读 和 ioremap控制GPIO寄存器

    一.配置GPIO读 在视频14的基础上做 1.利用拨码开关来实现GPIO输入 所以AP_SLEEP对应GPC0_3,然后在drivers/gpio/gpio-exynos4.c中对应EXYNOS4_G ...