简单demo

父组件:index.vue

<template>
<div class="app-container">
<vue-props-demo :user-name="name" :age="age" :sex="sex"></vue-props-demo>
</div>
</template>
<script>
import vuePropsDemo from '@/views/skill/propsDemo'
export default {
name:'skill',
data() {
return {
name:'姓名:东东',
age:'年龄:10',
sex:'性别:男',
} },
components:{
'vue-props-demo': vuePropsDemo,
}
}
</script>

子组件propsDemo.vue
<template>
<div class="app-container">
<p v-text="userName"></p>
<p v-text="name"></p>
<p v-text="sex"></p>
<p v-text="age"></p>
</div>
</template>
<script>
export default {
name:'vuePropsDemo',
props:['userName','sex','age'],//props定义
created(){
},
methods: {
getProps(){
}
}
}
</script>

效果:

1.props是什么:(简单的说用于父子组件通信,父传递给子数据)

  ①组件实例的作用域是孤立的,可以使用props在父子组件之间传递数据,在子组件中定义props,在父中通过props向子传递数据

  ②props是单向绑定的,意思是说父组件数据发生变化时,子组件也会发生变化,

  当在子组件中更改数据时,父组件不会发生变化,并且在控制台会发现警告信息,原因是:JS中对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态

father.vue

created(){
this.getProps();
},
methods:{
getProps(){
console.log('父组件:',this.name);
}
}

子组件propsDemo.vue
created(){
this.getProps();
},
methods: {
getProps(){
this.userName = '姓名:西西';
console.log('子组件:',this.userName);//子组件中可以这样获取父组件传递的数据
// this.userName = '姓名:西西';在子组件中修改父组件传递的值,会提示一个警告信息
}
}

效果:

2.props定义:

子组件:props:['userName','sex','age'],//多个单词构成时建议使用驼峰命名

父组件::user-name="name"   等价于   v-bind:user-name="name"

3.props分类:静态和动态

静态:user-name="姓名:东东";

动态::user-name="name"

4.props验证

index.vue

<template>
<div class="app-container">
<!-- <vue-props-demo :user-name="name" v-bind:age="age+1" :sex="sex"></vue-props-demo> -->
<vue-props-demo
:msg-null="1+1"
:msg-string="msgString"
:msg-obj="msgObj"
:msg-validate="msgValidate"
:msg-prop= "msgProp"
>
</vue-props-demo> </div>
</template>
<script>
import vuePropsDemo from '@/views/skill/propsDemo'
export default {
name:'skill',
data() {
return {
name:'姓名:东东',
age:10,
sex:'性别:男',
msgString:'String类型,必须是定义过的,可以是空字符串"",</br>如果非String类型,控制台会警告,例定义:msgString:10',
msgObj:{
name:'小红 ',
age:20
},
msgProp:12,
msgValidate:90,
} },
components:{
'vue-props-demo': vuePropsDemo,
},
created(){
this.getProps();
},
methods:{
getProps(){
console.log('父组件:',this.name);
}
}
}
</script>

propsDemo.vue

<template>
<div class="app-container">
<!-- <p v-text="userName"></p>
<p v-text="sex"></p>
<p v-text="age"></p> -->
<div class="title">props验证</div>
<el-form class="wrap-form" label-width="180px">
<el-form-item label="null类型props:">
<span v-text="msgNull"></span>
</el-form-item>
<el-form-item label="string类型props:">
<span v-html="msgString"></span>
</el-form-item>
<el-form-item label="number类型props:">
<span v-text="msgNumber"></span>
</el-form-item>
<el-form-item label="obj类型props:">
<span v-text="msgObj.name"></span>
<span v-text="msgObj.age"></span>
</el-form-item>
<el-form-item label="自定义验证props:">
<span v-text="msgValidate"></span>
</el-form-item>
<el-form-item label="多种类型props:">
<span v-text="msgProp"></span>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
name:'vuePropsDemo',
//props:['userName','sex','age'],//props定义
props:{
msgNull:null,//基础类型检测('null')意思是任何类型都可以
msgProp: [String, Number], // 多种类型
msgString:{//String类型,必须是定义过的,可以是空字符串""
type:String,
required:true,
},
msgNumber:{//Number类型,默认值100
type:Number,
default:100
},
msgObj:{//Object对象,返回值必须是js对象
type:Object,
default:function(){
return {
name:'lisa',
age:18
} }
},
msgValidate:{//自定义验证,必须是Number类型,验证规则:大于10,如果不满足条件,控制台会抛出警告
type:Number,
validator: function(val){
return val > 10;
}
}, },
data() {
return {
}
},
created(){},
methods: {}
}
</script>
<style>
.title{
font-size: 14px;
padding-left: 20px;
color: #333;
line-height: 34px;
background-color: #F5F5F5;
}
</style>

效果:

5.修改props数据

2种情况:
1、prop 作为初始值传入后,子组件想把它当作局部数据来用 2、prop 作为初始值传入,由子组件处理成其它数据输出

index.vue

<vue-props-demo :child-msg="msg"></vue-props-demo>
父组件 <input v-model="msg">{{msg}}

propsDemo.vue

<el-form-item label="子组件props:">
<input v-model="temp">
{{temp}}
</el-form-item>
props:['childMsg'],
data() {
return {
temp:this.childMsg
}
},
created(){},
methods: {},
watch:{
childMsg(){
this.temp = this.childMsg
}
}

参考资料:https://www.cnblogs.com/xiaohuochai/p/7388866.html

     https://vuejs.org/v2/guide/components-props.html#ad

     https://www.cnblogs.com/zhuruiyu/p/6917852.html

     

【vue】vue +element prop用法的更多相关文章

  1. 使用vue与element组件

    1.安装element npm i element-ui -S 2.引入 在main.js写入一下内容 import Vue from 'vue'; import ElementUI from 'el ...

  2. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  3. 【vue】vue使用Element组件时v-for循环里的表单项验证方法

    转载至:https://www.jb51.net/article/142750.htm标题描述看起来有些复杂,有vue,Element,又有表单验证,还有v-for循环?是不是有点乱?不过我相信开发中 ...

  4. 关于vue.js element ui 表单验证 this.$refs[formName].validate()的问题

        方法使用前需了解: 来自”和“小编的小提示: 首先打印一下this.$refs[formName],检查是否拿到了正确的需要验证的form. 其次在拿到了正确的form后,检查该form上添加 ...

  5. Vue. 之 Element table 单元格内容隐藏

    Vue. 之 Element table 单元格内容隐藏 在table显示数据时,若某个单元格的内容过多,需要进行隐层,在这一列的单元格属性添加::show-overflow-tooltip=&quo ...

  6. vue中的一些用法,持续更新中......

    1.跳转用法 @1.在template模板中通常使用router-link to='url' @2.在js中 1.this.$router.push({path: ''/order/index''}) ...

  7. vue.runtime.esm.js:593 [Vue warn]: Invalid prop: custom validator check failed for prop "value".报错解决

    在uni中使用 picker组件,一直报错 vue.runtime.esm.js:593 [Vue warn]: Invalid prop: custom validator check failed ...

  8. vue使用element Transfer 穿梭框实现ajax请求数据和自定义查询

    vue使用element Transfer 穿梭框实现ajax请求数据和自定义查询 基于element Transfer http://element-cn.eleme.io/#/zh-CN/comp ...

  9. Vue中directives的用法

    关于 vue 中 directives 的用法问题,详细可以参考vue官方对directives的解释 当前文章主要讲述directives怎么用,directives做权限按钮的功能 ###1. d ...

随机推荐

  1. JavaScript黑客是这样窃取比特币的,Vue开发者不用担心!

    如果你是JavaScript或者区块链开发者,如果你有关注区块链以及比特币,那么你应该听说了比特币钱包Copay被黑客攻击的事情.但是,你知道这是怎么回事吗? 总结 比特币钱包copay依赖event ...

  2. 为啥JQuery被淘汰了?

    摘要: 技术进步永不止步. 原文:jQuery的没落和技术发展的一般规律 作者:凌霄光 Fundebug经授权转载,版权归原作者所有. jQuery的成就 jQuery是一个伟大的库, 它解决了dom ...

  3. 关于openSetting通过tap的调用

    问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本 API和组件 小程序 Bug openSetting 工具 6.7.2 2.3.0 - 当前 Bug 的表现(可附上截图 ...

  4. struts配置文件说明

    (1)DOCTYPE(文档类型),所有的struts配置文件都需要有正确的doctype. (2)<struts>是根标记元素,在其下使用<package>标签声明不同的包. ...

  5. es6 语法 (Decorator)

    修饰器是一个函数,用来修改类的行为(注意:1.函数  2.修改行为  3.对类进行操作) { //修饰器函数定义 target:类本身,name名称,descriptor描述 let readonly ...

  6. mybatis 中 使用 allowMultiQueries=true

    单条的数据进行修改或者插入的时候没问题,但是进行批量操作的时候就会出现错误,是因为没有开启支持批量操作的功能. mybatis支持批量操作 开启批量执行sql的开关,在拼装mysql链接的url时,为 ...

  7. mysql随笔系列-1

    MySQL数据库管理 本人实验所用的MySQL数据库版本:5.5.56-MariaDB MariaDB Server  操作系统:centos7.5 1.创建数据库 MariaDB [(none)]& ...

  8. Spring学习之旅(二)极速创建Spring框架java Web工程项目

    编译工具:eclipse 1)创建Web工程:spring_web_helloworld 2)导入所需jar包: 3)创建实体类:同上篇博文 4)创建配置文件hellobean.xml.同上篇博文 不 ...

  9. Android SharedPreferences增,删,查操作

    SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedP ...

  10. Android图片加载为什么选择glide

    为什么图片加载我首先Glide 图片加载框架用了不少,从afinal框架的afinalBitmap,Xutils的BitmapUtils,老牌框架universalImageLoader,著名开源组织 ...