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

企业网站制作简介徐州市建筑工程交易信息网

企业网站制作简介,徐州市建筑工程交易信息网,自动发货网站建设,电商建站Vue自定义指令插槽作用域插槽具名插槽 一、学习目标 1.自定义指令 基本语法#xff08;全局、局部注册#xff09;指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 3.综合案例#xff1a;商品列表 MyTag组件封装MyTable组件封装 4.路… Vue自定义指令插槽作用域插槽具名插槽 一、学习目标 1.自定义指令 基本语法全局、局部注册指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 3.综合案例商品列表 MyTag组件封装MyTable组件封装 4.路由入门 单页应用程序路由VueRouter的基本使用 二、自定义指令 1.指令介绍 内置指令v-html、v-if、v-bind、v-on… 这都是Vue给咱们内置的一些指令可以直接使用 自定义指令同时Vue也支持让开发者自己注册一些指令。这些指令被称为自定义指令 每个指令都有自己各自独立的功能 2.自定义指令 概念自己定义的指令可以封装一些DOM操作扩展额外的功能 3.自定义指令语法 全局注册 //在main.js中 Vue.directive(指令名, {inserted (el) {// 可以对 el 标签扩展额外功能el.focus()} })局部注册 //在Vue组件的配置项中 directives: {指令名: {inserted () {// 可以对 el 标签扩展额外功能el.focus()}} }使用指令 注意在使用指令的时候一定要先注册再使用否则会报错 使用指令语法 v-指令名。如 注册指令时不用加v-前缀但使用时一定要加v-前缀 4.指令中的配置项介绍 inserted:被绑定元素插入父节点时调用的钩子函数 el使用指令的那个DOM元素 5.代码示例 需求当页面加载时让元素获取焦点autofocus在safari浏览器有兼容性 App.vue divh1自定义指令/h1input v-focus refinp typetext/div6.总结 1.自定义指令的作用是什么 2.使用自定义指令的步骤是哪两步 三、自定义指令-指令的值 1.需求 实现一个 color 指令 - 传入不同的颜色, 给标签设置文字颜色 2.语法 1.在绑定指令时可以通过“等号”的形式为指令 绑定 具体的参数值 div v-colorcolor我是内容/div2.通过 binding.value 可以拿到指令值指令值修改会 触发 update 函数 directives: {color: {inserted (el, binding) {el.style.color binding.value},update (el, binding) {el.style.color binding.value}} }3.代码示例 App.vue templatediv!--显示红色-- h2 v-colorcolor1指令的值1测试/h2!--显示蓝色-- h2 v-colorcolor2指令的值2测试/h2button改变第一个h1的颜色/button/div /templatescript export default {data () {return {color1: red,color2: blue}} } /scriptstyle/style四、自定义指令-v-loading指令的封装 1.场景 实际开发过程中发送请求需要时间在请求的数据未回来时页面会处于空白状态 用户体验不好 2.需求 封装一个 v-loading 指令实现加载中的效果 3.分析 1.本质 loading效果就是一个蒙层盖在了盒子上 2.数据请求中开启loading状态添加蒙层 3.数据请求完毕关闭loading状态移除蒙层 4.实现 1.准备一个 loading类通过伪元素定位设置宽高实现蒙层 2.开启关闭 loading状态添加移除蒙层本质只需要添加移除类即可 3.结合自定义指令的语法进行封装复用 .loading:before {content: ;position: absolute;left: 0;top: 0;width: 100%;height: 100%;background: #fff url(./loading.gif) no-repeat center; }5.准备代码 templatediv classmaindiv classboxulli v-foritem in list :keyitem.id classnewsdiv classleftdiv classtitle{{ item.title }}/divdiv classinfospan{{ item.source }}/spanspan{{ item.time }}/span/div/divdiv classrightimg :srcitem.img alt/div/li/ul/div /div /templatescript // 安装axios yarn add axios || npm i axios import axios from axios// 接口地址http://hmajax.itheima.net/api/news // 请求方式get export default {data () {return {list: [],isLoading: false,isLoading2: false}},async created () {// 1. 发送请求获取数据const res await axios.get(http://hmajax.itheima.net/api/news)setTimeout(() {// 2. 更新到 list 中用于页面渲染 v-forthis.list res.data.data}, 2000)} } /scriptstyle .loading:before {content: ;position: absolute;left: 0;top: 0;width: 100%;height: 100%;background: #fff url(./loading.gif) no-repeat center; }.box2 {width: 400px;height: 400px;border: 2px solid #000;position: relative; }.box {width: 800px;min-height: 500px;border: 3px solid orange;border-radius: 5px;position: relative; } .news {display: flex;height: 120px;width: 600px;margin: 0 auto;padding: 20px 0;cursor: pointer; } .news .left {flex: 1;display: flex;flex-direction: column;justify-content: space-between;padding-right: 10px; } .news .left .title {font-size: 20px; } .news .left .info {color: #999999; } .news .left .info span {margin-right: 20px; } .news .right {width: 160px;height: 120px; } .news .right img {width: 100%;height: 100%;object-fit: cover; } /style五、插槽-默认插槽 1.作用 让组件内部的一些 结构 支持 自定义 2.需求 将需要多次显示的对话框,封装成一个组件 3.问题 组件的内容部分不希望写死希望能使用的时候自定义。怎么办 4.插槽的基本语法 组件内需要定制的结构部分改用****占位使用组件时, ****标签内部, 传入结构替换slot给插槽传入内容时可以传入纯文本、html标签、组件 5.代码示例 MyDialog.vue templatediv classdialogdiv classdialog-headerh3友情提示/h3span classclose✖️/span/divdiv classdialog-content您确定要进行删除操作吗/divdiv classdialog-footerbutton取消/buttonbutton确认/button/div/div /templatescript export default {data () {return {}} } /scriptstyle scoped * {margin: 0;padding: 0; } .dialog {width: 470px;height: 230px;padding: 0 25px;background-color: #ffffff;margin: 40px auto;border-radius: 5px; } .dialog-header {height: 70px;line-height: 70px;font-size: 20px;border-bottom: 1px solid #ccc;position: relative; } .dialog-header .close {position: absolute;right: 0px;top: 0px;cursor: pointer; } .dialog-content {height: 80px;font-size: 18px;padding: 15px 0; } .dialog-footer {display: flex;justify-content: flex-end; } .dialog-footer button {width: 65px;height: 35px;background-color: #ffffff;border: 1px solid #e1e3e9;cursor: pointer;outline: none;margin-left: 10px;border-radius: 3px; } .dialog-footer button:last-child {background-color: #007acc;color: #fff; } /styleApp.vue templatedivMyDialog/MyDialog/div /templatescript import MyDialog from ./components/MyDialog.vue export default {data () {return {}},components: {MyDialog} } /scriptstyle body {background-color: #b3b3b3; } /style6.总结 场景组件内某一部分结构不确定想要自定义怎么办 使用插槽的步骤分为哪几步 六、插槽-后备内容默认值 1.问题 通过插槽完成了内容的定制传什么显示什么, 但是如果不传则是空白 能否给插槽设置 默认显示内容 呢 2.插槽的后备内容 封装组件时可以为预留的 slot 插槽提供后备内容默认内容。 3.语法 在 标签内放置内容, 作为默认显示内容 4.效果 外部使用组件时不传东西则slot会显示后备内容 外部使用组件时传东西了则slot整体会被换掉 5.代码示例 App.vue templatedivMyDialog/MyDialogMyDialog你确认要退出么/MyDialog/div /templatescript import MyDialog from ./components/MyDialog.vue export default {data () {return {}},components: {MyDialog} } /scriptstyle body {background-color: #b3b3b3; } /style七、插槽-具名插槽 1.需求 一个组件内有多处结构需要外部传入标签进行定制 上面的弹框中有三处不同但是默认插槽只能定制一个位置这时候怎么办呢? 2.具名插槽语法 多个slot使用name属性区分名字 template配合v-slot:名字来分发对应标签 3.v-slot的简写 v-slot写起来太长vue给我们提供一个简单写法 v-slot — # 4.总结 组件内 有多处不确定的结构 怎么办?具名插槽的语法是什么v-slot:插槽名可以简化成什么? 八、作用域插槽 1.插槽分类 默认插槽 具名插槽 插槽只有两种作用域插槽不属于插槽的一种分类 2.作用 定义slot 插槽的同时, 是可以传值的。给 插槽 上可以 绑定数据将来 使用组件时可以用 3.场景 封装表格组件 4.使用步骤 给 slot 标签, 以 添加属性的方式传值 slot :iditem.id msg测试文本/slot所有添加的属性, 都会被收集到一个对象中 { id: 3, msg: 测试文本 }在template中, 通过 #插槽名 obj 接收默认插槽名为 default MyTable :listlisttemplate #defaultobjbutton clickdel(obj.id)删除/button/template /MyTable5.代码示例 MyTable.vue templatetable classmy-tabletheadtrth序号/thth姓名/thth年纪/thth操作/th/tr/theadtbodytrtd1/tdtd赵小云/tdtd19/tdtdbutton查看 /button/td/trtrtd1/tdtd张小花/tdtd19/tdtdbutton查看 /button/td/trtrtd1/tdtd孙大明/tdtd19/tdtdbutton查看 /button/td/tr/tbody/table /templatescript export default {props: {data: Array} } /scriptstyle scoped .my-table {width: 450px;text-align: center;border: 1px solid #ccc;font-size: 24px;margin: 30px auto; } .my-table thead {background-color: #1f74ff;color: #fff; } .my-table thead th {font-weight: normal; } .my-table thead tr {line-height: 40px; } .my-table th, .my-table td {border-bottom: 1px solid #ccc;border-right: 1px solid #ccc; } .my-table td:last-child {border-right: none; } .my-table tr:last-child td {border-bottom: none; } .my-table button {width: 65px;height: 35px;font-size: 18px;border: 1px solid #ccc;outline: none;border-radius: 3px;cursor: pointer;background-color: #ffffff;margin-left: 5px; } /styleApp.vue templatedivMyTable :datalist/MyTableMyTable :datalist2/MyTable/div /templatescriptimport MyTable from ./components/MyTable.vueexport default {data () {return {list: [{ id: 1, name: 张小花, age: 18 },{ id: 2, name: 孙大明, age: 19 },{ id: 3, name: 刘德忠, age: 17 },],list2: [{ id: 1, name: 赵小云, age: 18 },{ id: 2, name: 刘蓓蓓, age: 19 },{ id: 3, name: 姜肖泰, age: 17 },]}},components: {MyTable}} /script6.总结 1.作用域插槽的作用是什么 2.作用域插槽的使用步骤是什么 九、综合案例 - 商品列表-MyTag组件抽离 1.需求说明 my-tag 标签组件封装 ​ (1) 双击显示输入框输入框获取焦点 ​ (2) 失去焦点隐藏输入框 ​ (3) 回显标签信息 ​ (4) 内容修改回车 → 修改标签信息 my-table 表格组件封装 ​ (1) 动态传递表格数据渲染 ​ (2) 表头支持用户自定义 ​ (3) 主体支持用户自定义 2.代码准备 templatediv classtable-casetable classmy-tabletheadtrth编号/thth名称/thth图片/thth width100px标签/th/tr/theadtbodytrtd1/tdtd梨皮朱泥三绝清代小品壶经典款紫砂壶/tdtdimg srchttps://yanxuan-item.nosdn.127.net/f8c37ffa41ab1eb84bff499e1f6acfc7.jpg //tdtddiv classmy-tag!-- input classinputtypetextplaceholder输入标签/ --div classtext茶具/div/div/td/trtrtd1/tdtd梨皮朱泥三绝清代小品壶经典款紫砂壶/tdtdimg srchttps://yanxuan-item.nosdn.127.net/221317c85274a188174352474b859d7b.jpg //tdtddiv classmy-tag!-- inputrefinpclassinputtypetextplaceholder输入标签/ --div classtext男靴/div/div/td/tr/tbody/table/div /templatescript export default {name: TableCase,components: {},data() {return {goods: [{id: 101,picture:https://yanxuan-item.nosdn.127.net/f8c37ffa41ab1eb84bff499e1f6acfc7.jpg,name: 梨皮朱泥三绝清代小品壶经典款紫砂壶,tag: 茶具,},{id: 102,picture:https://yanxuan-item.nosdn.127.net/221317c85274a188174352474b859d7b.jpg,name: 全防水HABU旋钮牛皮户外徒步鞋山宁泰抗菌,tag: 男鞋,},{id: 103,picture:https://yanxuan-item.nosdn.127.net/cd4b840751ef4f7505c85004f0bebcb5.png,name: 毛茸茸小熊出没儿童羊羔绒背心73-90cm,tag: 儿童服饰,},{id: 104,picture:https://yanxuan-item.nosdn.127.net/56eb25a38d7a630e76a608a9360eec6b.jpg,name: 基础百搭儿童套头针织毛衣1-9岁,tag: 儿童服饰,},],}}, } /scriptstyle langless scoped .table-case {width: 1000px;margin: 50px auto;img {width: 100px;height: 100px;object-fit: contain;vertical-align: middle;}.my-table {width: 100%;border-spacing: 0;img {width: 100px;height: 100px;object-fit: contain;vertical-align: middle;}th {background: #f5f5f5;border-bottom: 2px solid #069;}td {border-bottom: 1px dashed #ccc;}td,th {text-align: center;padding: 10px;transition: all 0.5s;.red {color: red;}}.none {height: 100px;line-height: 100px;color: #999;}}.my-tag {cursor: pointer;.input {appearance: none;outline: none;border: 1px solid #ccc;width: 100px;height: 40px;box-sizing: border-box;padding: 10px;color: #666;::placeholder {color: #666;}}} } /style3.my-tag组件封装-创建组件 MyTag.vue templatediv classmy-tag!-- inputclassinputtypetextplaceholder输入标签 / --div classtext茶具/div/div /templatescript export default {} /scriptstyle langless scoped .my-tag {cursor: pointer;.input {appearance: none;outline: none;border: 1px solid #ccc;width: 100px;height: 40px;box-sizing: border-box;padding: 10px;color: #666;::placeholder {color: #666;}} } /styleApp.vue template...tbodytr....tdMyTag/MyTag/td/tr/tbody... /template script import MyTag from ./components/MyTag.vue export default {name: TableCase,components: {MyTag,},..../script十、综合案例-MyTag组件控制显示隐藏 MyTag.vue templatediv classmy-taginputv-ifisEditv-focusrefinpclassinputtypetextplaceholder输入标签 blurisEdit false /div v-elsedblclickhandleClickclasstext茶具/div/div /templatescript export default {data () {return {isEdit: false}},methods: {handleClick () {this.isEdit true}} } /script main.js // 封装全局指令 focus Vue.directive(focus, {// 指令所在的dom元素被插入到页面中时触发inserted (el) {el.focus()} })十一、综合案例-MyTag组件进行v-model绑定 App.vue MyTag v-modeltempText/MyTag scriptexport default {data(){tempText:水杯}} /scriptMyTag.vue templatediv classmy-taginputv-ifisEditv-focusrefinpclassinputtypetextplaceholder输入标签:valuevalueblurisEdit falsekeyup.enterhandleEnter/div v-elsedblclickhandleClickclasstext{{ value }}/div/div /templatescript export default {props: {value: String},data () {return {isEdit: false}},methods: {handleClick () {this.isEdit true},handleEnter (e) {// 非空处理if (e.target.value.trim() ) return alert(标签内容不能为空)this.$emit(input, e.target.value)// 提交完成关闭输入状态this.isEdit false}} } /script 十二、综合案例-封装MyTable组件-动态渲染数据 App.vue templatediv classtable-caseMyTable :datagoods/MyTable/div /templatescript import MyTable from ./components/MyTable.vue export default {name: TableCase,components: { MyTable},data(){return {....}}, } /script MyTable.vue templatetable classmy-tabletheadtrth编号/thth名称/thth图片/thth width100px标签/th/tr/theadtbodytr v-for(item, index) in data :keyitem.idtd{{ index 1 }}/tdtd{{ item.name }}/tdtdimg:srcitem.picture//tdtd标签内容!-- MyTag v-modelitem.tag/MyTag --/td/tr/tbody/table /templatescript export default {props: {data: {type: Array,required: true}} }; /scriptstyle langless scoped.my-table {width: 100%;border-spacing: 0;img {width: 100px;height: 100px;object-fit: contain;vertical-align: middle;}th {background: #f5f5f5;border-bottom: 2px solid #069;}td {border-bottom: 1px dashed #ccc;}td,th {text-align: center;padding: 10px;transition: all .5s;.red {color: red;}}.none {height: 100px;line-height: 100px;color: #999;} }/style十三、综合案例-封装MyTable组件-自定义结构 App.vue templatediv classtable-caseMyTable :datagoodstemplate #headth编号/thth名称/thth图片/thth width100px标签/th/templatetemplate #body{ item, index }td{{ index 1 }}/tdtd{{ item.name }}/tdtdimg:srcitem.picture//tdtdMyTag v-modelitem.tag/MyTag/td/template/MyTable/div /templatescript import MyTag from ./components/MyTag.vue import MyTable from ./components/MyTable.vue export default {name: TableCase,components: {MyTag,MyTable},data () {return {....} } /script MyTable.vue templatetable classmy-tabletheadtrslot namehead/slot/tr/theadtbodytr v-for(item, index) in data :keyitem.idslot namebody :itemitem :indexindex /slot/tr/tbody/table /templatescript export default {props: {data: {type: Array,required: true}} }; /script
http://www.zqtcl.cn/news/927131/

相关文章:

  • 苏州手机网站建设费用上海企业制作网站
  • 网站上怎样做轮播图网站后台乱码怎么办
  • 专业网站建设品牌策划商务网站建设与维护考试
  • 网站开发手机版WordPress如何清空评论
  • 公司怎么建立网站吗010网站建设
  • 网站制作找哪家公司好湖北专业网站建设大全
  • 广州建设网站是什么关系wordpress 插件位置
  • 网站建设工作室 怎么样做一个网站需要多少钱
  • 北京网站制作人才免费企业网站源码
  • 微信商城网站怎么做网站备案是先做网站还是做完了备案
  • 工商局网站查询入口wordpress 文章列表顺序
  • 可以做平面设计兼职的网站模板商城建站
  • 织梦网站如何做301跳转畅销营销型网站建设电话
  • 新网企业邮箱保定seo
  • 河南国控建设集团招标网站网上注册公司核名流程
  • 推推蛙网站建设云南网站开发费用
  • 网站没服务器行吗价格低廉怎么换个说法
  • 用wordpress编写网站完整网站开发视频教程
  • 电商型网站建设价格ppt制作网站
  • 东莞做个网站查询工商营业执照
  • 从网址怎么看网站的域名租用云服务器多少钱
  • 网站开发技术有个人网页首页设计图片
  • 一站式网站建设平台做电商网站需要做什么准备
  • 网站开发小程序快站模板
  • 江苏集团网站建设智慧养老网站开发
  • 外网网址可以做英语阅读的网站怎么原创视频网站
  • 宁波网站建设流程图自己做网站可以揽业务吗
  • 赤峰市建设网站东胜做网站
  • 有口碑的坪山网站建设微信扫一扫登录网站如何做
  • 自己建网站要花多少钱蓟县网站建设