vue组件的使用及父子组件之间通信

news/2024/7/20 1:35:09 标签: 小程序, javascript, uni-app

之前了解到vue父子组件之间传值:

父组件传给子组件:通过在页面引用里 传值:

在父组件内引入子组件
<childCompont :parmas="parentParmas"></childCompont>
那么父组件的 parentParmas就会传入子组件内;
子组件接收:

props:{
			
			parmas:Object //这里写数据类型
		},

 子组件传给父组件一般通过事件:

//子组件
<view @click="toParent">传给父组件</view>

<script>
export default{
    methods:{
        toParent(){
            this.$emit('parentClick')
        }
    }
}
</script>

//父组件引用

<children @parentClick="zhixingChild"></children>

methods:{
    zhixingChild(){
        console.log("父组件执行了子组件事件")
    }

}

做了一个uniapp,其中用到了vue组件的使用及父子组件传值。

场景是这样的:点击父组件的一个按钮调用子组件(是一个弹框),但是要传值进去,子组件也会有值传到父组件。就是父子组件有通信。

代码如下:

父组件:orderMain.vue; 相关代码:

<view v-show="item.complain_flag == 0" class="qiangdanBtn tousu" @click="complaint(item)">去投诉</view>

<Complain :show="boxshow" @guanbi="guanbi" :forinfo="forinfo" @compClick="confirmCompl"></Complain>

<script>
    import Complain from './complain.vue';
    export default{
    components:{
        Complain,
    },
    name: 'orderMain',
data(){
    return{
       boxshow :false,
       forinfo: null,
    }
}
    methods:{
    complaint(e) {
			console.log(e);
			this.boxshow = true;
			this.forinfo = e;
		},
}
}
</script>

子组件complain.vue相关代码:

<template>
	<view class="content">
		<!-- 投诉弹框 -->
		<u-mask :show="show" >
			<view class="warp">
				<!-- 中间内容 -->
				<view class="rect" @tap.stop>
					
					<view class="rectTop">
						<view class="customAvatar"><image :src="fromshow.avatar_img+'/132'"></image> </view>
						<view class="topRight">
							<view class="complainCustom">投诉用户—{{fromshow.wx_name}}</view>
							<view class="close" @click="add">
								<image src="../static/guanbi.png"></image>
							</view>
						</view>
					</view>
					<view class="rectMain">
						<view class="selectReson">
							<view class="sr_left">选择原因</view>
							<view class="sr_right" @click="complaintReasons">
								<view class="srText">{{srText}}</view>
								<image class="toRight" src="../static/toRight.png"></image>
							</view>
							<view class="dropDown" v-show="showDrop">
								<view class="listLi" v-for="(item,index) in resonList" @click="chooseReason(item)">{{item.cause}}</view>
							</view>
						</view>
						<view class="uni-textarea">
							<textarea v-model="complainText" placeholder="请输入投诉内容"></textarea>
						</view>
						<view class="sureBtn" @click="confirmComplaint(complainText)" >确认投诉</view>
					</view>
				</view>
			</view>
		</u-mask>
	</view>
</template>
javascript">export default {
		props:{
			show:Boolean,
			forinfo:Object //这是父组件传过来的值(对象)
		},
		
		data(){
			return {
				fromshow:Object.assign({},this.forinfo),
				showDrop:false,
				resonList:[
					{cause:"测试一"},
					{cause:"测试二"},
					{cause:"测试三"},
					{cause:"测试四"}
				],
				srText:"请选择投诉原因",
				complainText:""
			}
		},
		watch:{
			forinfo(){ //这里要经过watch事件做判断
				if(this.forinfo){
					this.fromshow=Object.assign({},this.forinfo);
					
				}
			}
		},
		methods:{
			//获取投诉原因选项
			complaintReasons(){
				let that = this;
				that.showDrop = !that.showDrop;
				this.$request("?s=Recycle.Order.GetComplaint",{
					
				}).then(res=>{
					console.log(res);
					if(res.code==200){
						that.resonList = res.data.data
					}else if(res.code==400){
						uni.showToast({
							title:res.msg,
							icon:"none",
							duration:3000
						})
					}else{
						uni.showToast({
							title:"请求错误",
							icon:"none",
							duration:3000
						})
					}
				})
			},
			//选择原因
			chooseReason(e){
				console.log(e);
				this.srText = e.cause;
				this.showDrop = false
			},
			//确认投诉
			confirmComplaint(e){
				console.log(e);
				let that = this;
				let complData=new Object;
				complData['text'] = e;
				complData['cause'] = that.srText;
				complData['order_id'] = that.fromshow.id;
				this.$emit("compClick",complData);
				
			},
			
			add(){
				this.$emit('guanbi')
			}
		}
	}

文章篇幅比较长,感谢大家耐心看完。vue组件是vue框架的一大特色,它也广泛应用于微信小程序,uniapp中。组件之间的传值更是vue的精髓所在,用组件化开发确实方便了很多,也可精简代码。为开发者(程序员)提供了方便,自己也可以写一些常用的组件,方便之后项目的开发。

网上有很多技术大佬把组件传值的多种方法讲得很详细的。本博主技术有限,可能只讲到了一些浅显的东西。可能会被贻笑大方~~ 路过的朋友们,欢迎指点。


http://www.niftyadmin.cn/n/1038982.html

相关文章

mysql数据库 报表工具下载_数据库管理工具(Navicat Premium)

Navicat Premium 是一个可多重连接的数据库管理工具&#xff0c;它可让你以单一程序同时连接到 MySQL、SQL Server、SQLite、Oracle 及 PostgreSQL 数据库&#xff0c;让管理不同类型的数据库更加方便。Navicat Premium 结合了其他 Navicat 成员的功能。有了不同数据库类型的连…

uniapp图片上传手机端和浏览器端的不同

做了一个项目&#xff0c;里面用到uniapp上传图片&#xff0c;并且是android端的。我先在浏览器里运行可以&#xff0c;但在手机端就不行&#xff0c;后来经过调试&#xff0c;发现这两个端上传图片时有区别…… 下面打印一下 uni.chooseImage&#xff08;{}&#xff09;之后的…

怎样在window 2003 搭建php+mysql_如何在windows2003 II6环境下安装PHP+MYSQL+ZEND

windows2003IIS下PHPmysql的安装&#xff0c;以及必备的ZEND和PHPMYADMIN.PHP的安装步骤如下&#xff1a;1.去下载适合您的PHP版本&#xff0c;我们以PHP 5.2.17的安装为例。2.解压您下载的压缩包至C:/php下&#xff0c;并且在php文件夹下添加everyone用户组(读取和运行权限)(这…

uniapp手写单选

尽管uniapp 有 radio单选组件&#xff0c;但像一些情况下还是自己写出来好一些&#xff1a; 比如这里&#xff0c;有选择&#xff0c;删除&#xff0c;添加等功能。代码如下&#xff1a; <view class"locaOne" v-for"(item,index) in localList">&l…

vmware安装centos7配置网络

vmware安装centos7配置网络cd /etc/sysconfig/network-scripts vim ifcfg-ens33 编辑如下 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic DEFROUTEyes IPV4_FAILURE_FATALno IPV6INITyes IPV6_AUTOCONFyes IPV6_DEFROUTEyes IPV6_FAILURE_FATALno IPV6_ADDR_…

做一个简单的前后端交互登录系统

想做一个简单的前后端交互的登录系统&#xff0c;前端用jquery ajax请求&#xff0c;后端用java servlet。 前端页面做这样&#xff1a; 首先&#xff0c;创建数据库&#xff1a; 然后在MyEclipse 里面搭建项目&#xff0c;包和类的框架。 大致框架截图如下&#xff1a; User…

解决centos7上Jenkins在Shell执行git权限问题

添加以上shell命令构建时会报错 因为jenkins作为运行用户执行shell的&#xff0c;所以在jenkins的用户目录添加ssh秘钥 cd /var/lib/jenkins/.ssh sudo -Hu jenkins ssh-keygen -t rsa 然后再coding或者码云上配上公钥就好 或者用root的公钥 #复制.ssh目录到jenkins的用户目…

ios采用什么技术_上海管道CCTV检测-管道内检测一般采用什么技术

上海管道cctv检测,检测采用全进口的cctv地下管道摄像检测系统进行。该设备具有如下的技术特点和性能&#xff1a;①适用管道直径&#xff1a;φ250—φ3000&#xff0c;防水性能&#xff1a;10m水压。②可以测量管道的长度&#xff0c;知道损坏的具体位置&#xff0c;一次检测长…