当前位置: 首页 > news >正文

前端基础之《Vue(6)—组件基础(2)》

接上一篇。

七、v-model深入学习

<html>
<head><title>组件基础-4</title><style>.score {display: inline-block;}.score>span {display: inline-block;width: 25px;height: 25px;background: url(./assets/star.png) center center / 25px 25px;cursor: pointer;}.score>span.on {background: url(./assets/star-on.png) center center / 25px 25px;}</style>
</head>
<body><div id="app"><h1>售后评分</h1><score-1 v-model.number='speed'>配送速度:</score-1><br><score-1 v-model.number='service'>服务质量:</score-1><br><score-1 v-model.number='exp'>用户体验:</score-1><br><textarea name="" id="" cols="30" rows="3" v-model.lazy='desc'></textarea><br><button @click='submit'>提交</button></div><script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script><script>// 评分组件Vue.component('score-1',{template: `<div class="score"><slot name='default'></slot><span v-for='(i, index) in 5' v-bind:class='{on: value>=i}' v-on:click='$emit("input", i)'></span><slot name='xxx'></slot></div>`,props: {value: {type: Number, default: 0}}})const app = new Vue({el: '#app',data: {speed: 0,service: 0,exp: 0,desc: ''},methods: {submit() {// 提交接口入参const data = {speed: this.speed,service: this.service,exp: this.exp,desc: this.desc}console.log('提交评价', data)}}})</script></body>
</html>

1、在组件中,可以把

<score-1 v-bind:value="num" v-on:input='num = $event'>

写成

<score-1 v-model='num'>

2、在组件中,v-model='num' 等于 v-bind:value='num' + v-on:input='num = $event'
是一个语法糖,相当于这两个的简写。

3、自定义组件,除了封装(可维护),还可以复用(快速开发)

4、v-model对不同的表单来讲是不一样的
(1)对text和textarea文本表单,v-model 等于 v-bind:value + v-on:input
(2)对checkbox和radio选择框,v-model 等于 v-bind:checked + v-on:change
(3)对select下拉框,v-model 等于 v-bind:value + v-on:change

八、简单案例:封装一个弹窗组件

1、代码

<html>
<head><title>组件基础-5</title><style>.layer {background: rgba(0, 0, 0, 0.6);position: absolute;top: 0;bottom: 0;left: 0;right: 0;transition: all ease 0.1s;}.modal {position: absolute;top: 100px;left: 50%;width: 500px;margin-left: -260px;border-radius: 3px;background: white;}header {line-height: 50px;box-sizing: border-box;padding: 0 20px;font-size: 14px;overflow: hidden;border-bottom: 1px solid #eee;}.title {float: left;}.close {float: right;cursor: pointer;}main {box-sizing: border-box;padding: 20px;font-size: 14px;}footer {line-height: 50px;border-top: 1px solid #eee;overflow: hidden;height: 51px;}footer>span {float: right;height: 30px;line-height: 28px;margin-right: 20px;cursor: pointer;padding: 0 20px;margin-top: 10px;font-size: 12px;border: 1px solid #ccc;border-radius: 2px;}footer>span.primary {border-color: blue;background: blue;color: white;}</style>
</head>
<body><div id="app"><button @click='show=true'>修改</button><tc-modal title="修改用户信息" @close='onClose' @submit='onSubmit' :show='show'><div><span>用户名:</span><input type="text" v-model="name"/></div></tc-modal></div><script src="https://cdn.jsdelivr.net/npm/vue@2.7.16/dist/vue.js"></script><!-- 视图结构 --><script type="text/x-template" id="modal"><div class='layer' v-if='show'><div class='modal'><header><span class='title' v-text='title'></span><span class='close' @click='$emit("close")'>X</span></header><main><slot>主体区域</slot></main><footer><span class='primary' @click='$emit("submit")'>确定</span><span @click='$emit("close")'>取消</span></footer></div></div></script><script>// 封装弹窗组件Vue.component('tc-modal', {template: '#modal',props: {title: {type: String, default: '标题'},show: {type: Boolean, default: false}}})const app = new Vue({el: '#app',data: {name: '',show: false},methods: {onClose() {console.log('---关闭')this.show = falsethis.name = ''},onSubmit() {console.log('---提交', this.name)//这里可以调接口this.show = falsethis.name = ''}}})</script></body>
</html>

2、说明
自定义属性,给你一个属性
自定义事件,给你一个事件
自定义插槽,给你一块视图结构

相关文章:

  • 1.Linux基础指令
  • MATLAB 控制系统设计与仿真 - 37
  • Linux:命令行参数、环境变量
  • [经验总结]Linux双机双网卡Keepalived高可用配置及验证细节
  • 大数据赋能,全面提升‘企业服务平台’实际效能!
  • 浏览器的存储机制 - Storage
  • NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)
  • 爬虫学习——Scrapy
  • Java编程语言 1.打印数组元素 2.Student类 StudentTest类
  • 【go】什么是Go语言中的GC,作用是什么?调优,sync.Pool优化,逃逸分析演示
  • alertManager部署安装、告警规则配置详解及告警消息推送
  • 华为openEuler操作系统全解析:起源、特性与生态对比
  • 机器学习模型(2/4课时):损失函数
  • 深度学习中的卷积神经网络
  • 命令行工具kubectl
  • 密码学中的盐值是什么?
  • RAII资源管理理解
  • Python 中的数据类型有哪些
  • 每日算法-250418
  • 智能化印刷新时代:Modbus 转profinet网关的完美融合,提升生产效率与环保标准
  • 对话地铁读书人|财务管理孟先生:老婆让我看《三体》
  • 山东临沂市市长张宝亮履新市委书记
  • 重庆警方通报“货车轮胎滚进服务区致人死亡”:正进一步调查
  • 雅生活服务:向雅居乐收购两家环保公司,总价约6060万元
  • 小伙称被骗婚骗惨了:存款金条怀孕全是假的,岳父岳母找人演