首页 > 其他分享 >Vue表单输入绑定、组件、插槽的使用(三)

Vue表单输入绑定、组件、插槽的使用(三)

时间:2022-10-30 22:12:26浏览次数:96  
标签:function Vue 插槽 vm 表单 组件 data

一、表单输入绑定

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
			integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
	</head>
	<body>
		<div id="container">
			<div>
				<!-- 各表单类型的输入绑定 -->
				<ol>
					<li> 文本框</li>
					<li> 密码框</li>
					<li> 单选按钮</li>
					<li> 复选框</li>
					<li>下拉列表</li>
				</ol>
			</div>
			<hr>
			<label>
				<p>
					<input type="text" placeholder="文本框" v-model="username" />
				</p>
			</label>
			<label>
				<p>
					<input type="password"  placeholder="密码框" v-model="password">
				</p>
			</label>
			<br>
			<label>
				<p>
					<input type="radio" v-model="sex" value="男">男
					<input type="radio" v-model="sex" value="女">女
				</p>
			</label>
			<br>
			<label>
				<p>
					<input type="checkbox" v-model="hobbies" value="篮球">篮球
					<input type="checkbox" v-model="hobbies" value="足球">足球
					<input type="checkbox" v-model="hobbies" value="羽毛球">羽毛球
					<input type="checkbox" v-model="hobbies" value="乒乓球">乒乓球
				</p>
			</label>
			<hr>
			<p>下拉单选</p>
			<label>
				<select v-model="city">
					<option value="北京">北京</option>
					<option value="上海">上海</option>
					<option value="广州">广州</option>
					<option value="深圳">深圳</option>
				</select>
			</label>

			<hr>
			<p>下拉多选</p>
			<label>
				<select v-model="cities" multiple>
					<option value="北京">北京</option>
					<option value="上海">上海</option>
					<option value="广州">广州</option>
					<option value="深圳">深圳</option>
				</select>
			</label>

			<button type="button" class="btn btn-success"@click="test">测试</button>
		</div>

	</body>
	<script src="./js/vue.js"></script>
	<!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
	<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js"
		integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous">
	</script>
	<!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。 -->
	<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
		integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous">
	</script>
	<script>
		//根据键盘码设置按键的别名
		Vue.config.keyCodes.j = 74;

		var vm = new Vue({
			el: "#container",
			data: {
				username: "admin",
				password: "111111",
				sex: "男",
				hobbies: [],
				city: "北京",
				cities: ["北京", "上海"]
			},
			methods: {
				test:function(){
					console.log('用户名:'+vm.username+'密码:'+vm.password)
					console.log(vm.sex)
					console.log(vm.hobbies)
					console.log(vm.city)
					console.log(vm.cities)
				}
			}
		})
	</script>
</html>

二、组件

对一些通用的html模块进行封装-可复用

示例:

新建js文件,注册组件

Vue.component('header-nav', {
	data: function() {
		/* 组件中data数据通过函数返回 */
		return {
			// title:'JD狗'
			str2:"你好"
		}
	},
	template: `
		<div>
			<ul class="nav-header">
				<li>
					<img src="./img/logo.png" width="200px" height="60px">
				</li>
				<li>
					{{title}}
				</li>
				<li>
					<button type="button" @click='childMethod'>组件测试</button>
				</li>
			</ul>
		</div>
	`,
	props: ['title'], //组件通信时接收父组件【引用组件的Vue实例】传递的参数对象 - 数据
	methods: {
		childMethod: function() {
			this.$emit("my-componet","hello",'1')
		}
	},
})

组件调用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="./css/myComponent.css" />
		<script src="./js/vue.js"></script>
		<script src="./js/my-components.js"></script>
	</head>
	<body>
		<div id="container">
			//注册的组件名
			<header-nav :title="str" @my-componet="parentMethod"></header-nav>
			获取组件传递过来的数据{{str1}}
		</div>
	</body>
	<script type="text/javascript">
		var vm = new Vue({
			el: "#container",
			data: {
				str:'父组件中的值传给子组件',
				str1:''
			},
			methods: {
				parentMethod:function(e,p){
					vm.str1 = e+p;
				}
			}
		})
	</script>
</html>

三、组件通信

1、父传子

封装的组件中使用props属性接收父组件传递过来的值

例:props:[ 接收需要父组件传入参数]

2、子传父

不能直接通过父组件的事件方法传,
但是可以通过“调用”父组件的函数,通过函数来传值

子组件

Vue.component('header-nav', {
	data: function() {
		/* 组件中data数据通过函数返回 */
		return {
			// title:'JD狗'
			str2:"你好"
		}
	},
	template: `
		<div>
			<ul class="nav-header">
				<li>
					<img src="./img/logo.png" width="200px" height="60px">
				</li>
				<li>
					{{title}}
				</li>
				<li>
					<button type="button" @click='childMethod'>组件测试</button>
				</li>
			</ul>
		</div>
	`,
	props: ['title'], //组件通信时接收父组件【引用组件的Vue实例】传递的参数对象 - 数据
	methods: {
		childMethod: function() {
			this.$emit("my-componet","hello",'1')
		}
	},

})

父组件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="./css/myComponent.css" />
		<script src="./js/vue.js"></script>
		<script src="./js/my-components.js"></script>
	</head>
	<body>
		<div id="container">
			<header-nav :title="str" @my-componet="parentMethod"></header-nav>
			获取组件传递过来的数据{{str1}}
		</div>
	</body>
	<script type="text/javascript">
		var vm = new Vue({
			el: "#container",
			data: {
				str:'父组件中的值传给子组件',
				str1:''
			},
			methods: {
				parentMethod:function(e,p){
					vm.str1 = e+p;
				}
			}
		})
	</script>
</html>

四、组件插槽

从vue实例对象的父组件需要往子组件中添加html标签元素时, 封装的组件中需要定义一个插槽 也就是在需要添加元素的地方给定一个标签

4.1、插槽的使用

Vue.component("page-frame",{
	template:`
		<div>
			<div style="height: 60px; background-color: pink;">{{headerTitle}}</div>
			<div style="height: 500px;">
				<slot></slot>
			</div>
			<div style="height: 40px;background-color: green;">3</div>
		</div>
	`,
	data:function(){
		return{
			
		}
	},
	props:['headerTitle']
	
})
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" type="text/css" href="./css/myComponent.css" />
		<script src="./js/vue.js"></script>
		<script src="./js/my-components.js"></script>
	</head>
	<body>
		<div id="container">
			<page-frame :headerTitle="标题">
				<template>
					<table>
						<tr>
							<th>编号</th>
							<th>学号</th>
							<th>姓名</th>
						</tr>
					</table>
				</template>
			</page-frame>
		</div>
	</body>
	<script type="text/javascript">
		var vm = new Vue({
			el: "#container",
			data: {
				
			}

		})
	</script>
</html>

4.2、具名插槽

组件中需要有大于1个<slot><slot>
时,需要为每个solt定义一个名字,【name属性】,指定具体添加到哪

官网介绍

4.3、插槽的作用域

定义组件时,将data数据绑定到solt中,父组件可以直接调用

标签:function,Vue,插槽,vm,表单,组件,data
From: https://www.cnblogs.com/zceng/p/16842408.html

相关文章

  • Vue 脚手架编程
    1.​​Vue​​脚手架编程1.1初始化脚手架1.1.1说明​​Vue​​​脚手架是​​Vue​​官方提供的标准化开发工具(开发平台)最新的版本是​​4.x​​​​文档​​1.1.2......
  • Vue 脚手架编程
    1.1初始化脚手架1.1.1说明Vue脚手架是Vue官方提供的标准化开发工具(开发平台)最新的版本是4.x文档1.1.2具体步骤第一步(仅第一次执行):全局安装@vue/clinpm......
  • 面试宝典(vue系列五)
    ......
  • 重置form表单
    <scripttype="text/javascript"> $(function(){ //给"创建"按钮添加单击事件 $("#createActivityBtn").click(function(){ //初始化工作 //重置表单 //$......
  • vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
    安装wavesurfer.jscnpmiwavesurfer.js--save无cnpm的先运行npmicnpm-g全局安装cnpm绘制音频波形图常用的配置参数详见注释。<template><divstyle="padding:......
  • VUE04
    1计算属性#如果{{函数()}},每次页面刷新,函数都会重新执行#函数---》当属性来使用,缓存<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • vue-04
    计算属性1.computed--计算属性--只有涉及到计算属性中的变量发生变化它才重新运算2.不是计算属性--页面刷新就会变化<body><divid="app"><inputtype="......
  • 【2022.10.28】Vue基础学习(4)
    内容概括1.计算属性重写过滤案例2.监听属性3.组件介绍和定义4.父子通信之父传子5.父子通信之子传父6.ref属性7.动态组件keep-alive8.插槽9.vue-cli内容......
  • 创建 Vue 实例的几种方法
    创建Vue实例的几种方法1、html文件中<body><divid="root":class="{cur:1===1}">我们</div><scriptsrc="../js/vue.js"></script><script>constvm=new......
  • 第121期:一次成功的基于vue3和ts的CodeReview
    封面图CodeReview现场背景当前项目已经接入了公司自研的前端监控平台,已经有能力对线上运行的各个项目进行错误监控,并且可以统计相关报错信息及日志。对于报错问题的修复前段......