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

济南做网站的中企如何推广自己的店铺

济南做网站的中企,如何推广自己的店铺,网站建设技术网站建,长沙seo行者seo09目录 组件封装 parseTime函数 debounce 函数 页面使用 【扩展】vue 函数式组件 函数式组件特点#xff1a; 函数式组件的优点#xff1a; 【扩展】vue中的render函数 一、初步认识render函数 二、为什么使用render函数 三、render函数的解析 组件封装 这段代码是一…目录 组件封装 parseTime函数 debounce 函数 页面使用 【扩展】vue 函数式组件 函数式组件特点 函数式组件的优点 【扩展】vue中的render函数 一、初步认识render函数 二、为什么使用render函数 三、render函数的解析 组件封装 这段代码是一个封装的分页表格组件。它使用了Vue.js框架并结合了Element UI中的el-table和el-pagination组件来实现。该组件接受一系列属性作为数据源包括列表数据(list)、表格列(columns)、操作按钮列(operates)、总数(total)、分页参数(pagination)等。 在模板中使用el-table组件来展示表格数据使用el-pagination组件来实现分页功能。el-table-column用来定义每列的样式和展示内容。组件中还包括其他的一些方法和事件处理函数如handleSizeChange用于切换每页显示的数量handleIndexChange用于切换页码handleSelectionChange处理多行选中等。 此外还定义了一些样式规则来美化表格的显示效果如设置表头颜色、调整列的样式、设置操作按钮组的布局、设置筛选弹窗和表格操作弹窗的样式等。 最后使用了scss来编写样式表通过设置类名来控制样式的展示。 在template标签中定义了一个表格组件包括表格本身列定义按钮操作组和分页控件。 在script标签中导入了必要的依赖并定义了组件的属性props、数据data、生命周期钩子activated、beforeDestroy、deactivated、created、mounted和方法methods。 props属性用于接受从父组件传递进来的数据如数据列表 list、列定义 columns、按钮操作 operates、总数 total、分页参数 pagination 等。 data数据属性包括一些内部状态如表格高度 height、监听窗口调整大小的回调函数 $_resizeHandler、当前页码 pageIndex、表格分页信息 tableCurrentPagination、多行选中数据 multipleSelection 等。 在生命周期钩子中组件监听窗口大小调整事件自动调整表格高度并在适当的生命周期中初始化和销毁事件监听器。 methods包括一系列方法如计算表头宽度的方法 headSpanFit、初始化事件监听器的方法 initListener、销毁事件监听器的方法 destroyListener、调整表格高度的方法 resize、处理每页显示数量变化的方法 handleSizeChange、处理页码变化的方法 handleIndexChange、处理多行选中的方法 handleSelectionChange 等。 最后在style标签中定义了一些样式包括表格样式、分页样式、按钮样式、筛选和操作弹窗样式等。 !--region 封装的分页 table-- !--region 封装的分页 table-- templatediv classtableel-table idiTable v-loading.iTableoptions.loading :datalist :stripeoptions.stripe refmutipleTableselection-changehandleSelectionChange :heightnoStatic ? customHeight : height:max-heightnoStatic ? customHeight : height!--region 选择框--el-table-column v-ifoptions.mutiSelect typeselection stylewidth: 55px/el-table-column!--endregion--!--region 数据列--template v-for(column, index) in columnsel-table-column :min-widthheadSpanFit(column) :propcolumn.prop :labelcolumn.label :aligncolumn.align:widthcolumn.widthtemplate slot-scopescopetemplate v-if!column.rendertemplate v-ifcolumn.formatterspan v-htmlcolumn.formatter(scope.row, column)/span/templatetemplate v-elsespan{{ scope.row[column.prop] 0? 0: scope.row[column.prop] || -- }}/span/template/templatetemplate v-elseexpand-dom :columncolumn :rowscope.row :rendercolumn.render :indexindex/expand-dom/template/template/el-table-column/template!--endregion--!--region 按钮操作组--el-table-column reffixedColumn label操作 aligncenter :widthoperates.width :fixedoperates.fixedv-ifoperates.list.length 0template slot-scopescopediv classoperate-grouptemplate v-for(btn, key) in operates.listdiv classitem v-iftypeof btn.show function? btn.show(scope.$index, scope.row): btn.showel-button :typebtn.type :keykey itbtn :sizebtn.size || mini :iconbtn.icon :disabledtypeof btn.disabled function? btn.disabled(scope.$index, scope.row): btn.disabled :plainbtn.plain click.native.preventbtn.method(scope.$index, scope.row){{btn.label }}/el-button/div/template/div/template/el-table-column!--endregion--/el-tablediv styleheight: 12px/div!--region 分页--el-pagination v-ifpagination size-changehandleSizeChange current-changehandleIndexChange:page-sizetableCurrentPagination.pageSize :page-sizesthis.tableCurrentPagination.pageArray:current-pagetableCurrentPagination.pageIndex layouttotal,sizes, prev, pager, next,jumper:totaltotal/el-pagination!--endregion--/div /template !--endregion-- script import { debounce } from /utils; const _pageArray [20, 50, 100]; // 每页展示条数的控制集合 export default {props: {list: {type: Array,default: [], // prop:表头绑定的地段label表头名称align每列数据展示形式left, center, rightwidth:列宽}, // 数据列表columns: {type: Array,default: [], // 需要展示的列 prop列数据对应的属性label列名align对齐方式width列宽},operates: {type: Object,default: {}, // width:按钮列宽fixed是否固定left,right,按钮集合 label: 文本type :类型primary / success / warning / danger / info / textshow是否显示icon按钮图标plain是否朴素按钮disabled是否禁用method回调方法},total: {type: Number,default: 0,}, // 总数pagination: {type: Object,default: null, // 分页参数 pageSize:每页展示的条数pageIndex:当前页pageArray: 每页展示条数的控制集合默认 _page_array},noStatic: false, // 是否计算表格高度customHeight: {//与noStatic一起使用type: Number,default: 320,},otherHeight: {type: Number,default: 180,}, // 计算表格的高度options: {type: Object,default: {stripe: false, // 是否为斑马纹 tableloading: false, // 是否添加表格loading加载动画highlightCurrentRow: false, // 是否支持当前行高亮显示mutiSelect: false, // 是否支持列表项选中功能},}, // table 表格的控制参数},components: {expandDom: {functional: true,props: {row: Object,render: Function,index: Number,column: {type: Object,default: null,},},render: (h, ctx) {const params {row: ctx.props.row,index: ctx.props.index,};if (ctx.props.column) params.column ctx.props.column;return ctx.props.render(h, params);},},},data() {return {height: 250,$_resizeHandler: null,pageIndex: 1,tableCurrentPagination: {},multipleSelection: [], // 多行选中};},activated() {// 通常是在使用 Vue.js 的 keep-alive 包装时组件会被缓存并在重新激活时调用这个钩子函数。if (!this.$_resizeHandler) {// avoid duplication initthis.initListener();}// when keep-alive chart activated, auto resizethis.resize();},//当组件即将被销毁beforeDestroy时会调用这个钩子函数。beforeDestroy() {this.destroyListener();},//当组件被停用deactivated通常也是在 keep-alive 包装下组件会调用这个钩子函数。deactivated() {this.destroyListener();},created() { },mounted() {this.initListener();if (this.pagination !this.pagination.pageSizes) {this.pagination.pageArray _pageArray; // 每页展示条数控制}this.tableCurrentPagination this.pagination || {pageSize: this.total,pageIndex: 1,}; // 判断是否需要分页},methods: {//计算小列宽headSpanFit(column) {let labelLong column.label.length; // 表头label长度let size 20; // 根据需要定义标尺直接使用字体大小确定就行也可以根据需要定义let minWidth labelLong * size 100 ? 100 : labelLong * size; // 根据label长度计算该表头最终宽度return minWidth;},// 初始化监听器的方法。initListener() {this.$_resizeHandler debounce(() {this.resize();}, 200);window.addEventListener(resize, this.$_resizeHandler);this.$nextTick(() {this.resize();});},//这是一个销毁监听器的方法。destroyListener() {window.removeEventListener(resize, this.$_resizeHandler);this.$_resizeHandler null;},//计算表格的高度resize() {// 不需要计算if (this.noStatic) {return;}const { mutipleTable } this.$refs;// 窗口的高度减去表格的顶部偏移let staticHeight window.innerHeight - this.$refs.mutipleTable.$el.offsetTop - this.otherHeight;this.height staticHeight 250 ? 250 : staticHeight;console.log(this.height);//保表格的布局在高度调整后得以更新。mutipleTable mutipleTable.doLayout();},// 切换每页显示的数量handleSizeChange(size) {if (this.pagination) {this.tableCurrentPagination {pageIndex: 1,pageSize: size,};this.$emit(handleSizeChange, this.tableCurrentPagination);}},// 切换页码handleIndexChange(currnet) {if (this.pagination) {this.tableCurrentPagination.pageIndex currnet;this.$emit(handleIndexChange, this.tableCurrentPagination);}},// 多行选中handleSelectionChange(val) {this.multipleSelection val;this.$emit(handleSelectionChange, val);},// 显示 表格操作弹窗showActionTableDialog() {this.$emit(handelAction);},}, }; /scriptstyle langscss .table {height: 100%;.el-pagination {float: right;margin: 20px;}.el-table__header-wrapper,.el-table__fixed-header-wrapper {thead {tr {th {color: #333333;}}}}.el-table-column--selection .cell {padding: 0;text-align: center;}.el-table__fixed-right {bottom: 0 !important;right: 6px !important;z-index: 1004;}.operate-group {display: flex;flex-wrap: wrap;.item {margin-top: 4px;margin-bottom: 4px;display: block;flex: 0 0 50%;}}.filter-data {top: e(calc((100% - 100px) / 3));background-color: rgba(0, 0, 0, 0.7);}.table-action {top: e(calc((100% - 100px) / 2));background-color: rgba(0, 0, 0, 0.7);}.fix-right {position: absolute;right: 0;height: 100px;color: #ffffff;width: 30px;display: block;z-index: 1005;writing-mode: vertical-rl;text-align: center;line-height: 28px;border-bottom-left-radius: 6px;border-top-left-radius: 6px;cursor: pointer;} } /styleparseTime函数 // 日期格式化 export function parseTime(time, pattern) {if (arguments.length 0 || !time) {return null}const format pattern || {y}-{m}-{d} {h}:{i}:{s}let dateif (typeof time object) {date time} else {if ((typeof time string) (/^[0-9]$/.test(time))) {time parseInt(time)} else if (typeof time string) {time time.replace(new RegExp(/-/gm), /).replace(T, ).replace(new RegExp(/\.[\d]{3}/gm), );}if ((typeof time number) (time.toString().length 10)) {time time * 1000}date new Date(time)}const formatObj {y: date.getFullYear(),m: date.getMonth() 1,d: date.getDate(),h: date.getHours(),i: date.getMinutes(),s: date.getSeconds(),a: date.getDay()}const time_str format.replace(/{(y|m|d|h|i|s|a)}/g, (result, key) {let value formatObj[key]// Note: getDay() returns 0 on Sundayif (key a) { return [日, 一, 二, 三, 四, 五, 六][value] }if (result.length 0 value 10) {value 0 value}return value || 0})return time_str }debounce 函数 export function debounce(func, wait, immediate) {let timeout, args, context, timestamp, resultconst later function() {// 据上一次触发时间间隔const last new Date() - timestamp// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 waitif (last wait last 0) {timeout setTimeout(later, wait - last)} else {timeout null// 如果设定为immediatetrue因为开始边界已经调用过了此处无需调用if (!immediate) {result func.apply(context, args)if (!timeout) context args null}}}return function(...args) {context thistimestamp new Date()const callNow immediate !timeout// 如果延时不存在重新设定延时if (!timeout) timeout setTimeout(later, wait)if (callNow) {result func.apply(context, args)context args null}return result} }页面使用 templatediv classtable-page!--region table 表格--app-table :listlist :totaltotal :otherHeightotherHeight :optionsoptions :paginationpagination:columnscolumns :operatesoperates handleSizeChangehandleSizeChange handleIndexChangehandleIndexChangehandleSelectionChangehandleSelectionChange/app-table!--endregion--/div /template script import {parseTime,} from /utils/ruoyi; export default {data() {return {total: 0,list: [{id: 1,title: 标题,state: 0,author: 张三,phone: 12346788901,email: 1234556778qq.com,createDate: 2023-04-23 16:11:38}],otherHeight: 208,columns: [{prop: id,label: 编号,align: center,width: 60},{prop: title,label: 标题,align: center,width: 400,formatter: (row, column, cellValue) {return span stylewhite-space: nowrap;color: dodgerblue;${row.title}/span}},{prop: state,label: 状态,align: center,width: 160,render: (h, params) {return h(el-tag, {props: { type: params.row.state 0 ? success : params.row.state 1 ? info : danger } // 组件的props}, params.row.state 0 ? 上架 : params.row.state 1 ? 下架 : 审核中)}},{prop: author,label: 作者,align: center,width: 120},{prop: phone,label: 联系方式,align: center,width: 160},{prop: email,label: 邮箱,align: center,width: 240},{prop: createDate,label: 发布时间,align: center,width: 180,formatter: (row, column, cellValue) {return parseTime(row.createDate)}}], // 需要展示的列operates: {width: 200,fixed: right,list: [{label: 编辑,type: warning,show: (index, row) {return true},icon: el-icon-edit,plain: true,disabled: false,method: (index, row) {this.handleEdit(index, row)}},{label: 删除,type: danger,icon: el-icon-delete,show: true,plain: false,disabled: (index, row) {return false},method: (index, row) {this.handleDel(index, row)}}]}, // 操作按钮组pagination: {pageIndex: 1,pageSize: 20}, // 分页参数options: {stripe: true, // 是否为斑马纹 tableloading: false, // 是否添加表格loading加载动画highlightCurrentRow: true, // 是否支持当前行高亮显示mutiSelect: true // 是否支持列表项选中功能} // table 的参数}},components: {expandDom: {props: {column: {required: true},row: {required: true}},render(h) {return h(div, {}, ([this.column.render(this.row, this.column)]))}}},mounted() {},methods: {// 切换每页显示的数量handleSizeChange(pagination) {this.pagination pagination},// 切换页码handleIndexChange(pagination) {this.pagination pagination},// 选中行handleSelectionChange(val) {console.log(val:, val)},// 编辑handleEdit(index, row) {console.log( index:, index)console.log( row:, row)},// 删除handleDel(index, row) {console.log( index:, index)console.log( row:, row)},} } /script【扩展】vue 函数式组件 函数式组件特点 没有管理任何状态没有监听任何传递给它的状态没有生命周期方法它只是接收一些prop的函 我们将这样的组件标记为functional 无状态 无响应式数据无实例 无this上下文 函数式组件的优点 渲染开销低因为函数式组件只是函数 {functional: true,// Props 是可选的props: {// ...},// 为了弥补缺少的实例// 提供第二个参数作为上下文render: function (createElement, context) {// ...} }props: 提供所有prop的对象children:VNode 子节点的数组slots: 一个函数返回了包含所有插槽的对象scoptedSlots:(2.6.0) 一个暴露传入的作用域插槽的对象也以函数形式暴露普通插槽data:传递个组件的整个数据对象作为createElement的第二个参数传入组件parent:对父组件的引用listeners:(2.3.0) 一个包含了所有父组件为当前组件祖册的事件监听器对象是data.on的一个别名injections:(2.3.0) 如果使用了inject选项则改对象包含了应当被注入的属性 【扩展】vue中的render函数 一、初步认识render函数 import Vue from vue import App from ./AppVue.config.productionTip falsenew Vue({el: #app,render: h h(App) })在使用脚手架创建vue项目的过程我们很容易看到render这个函数相对于其他标签我们对于render还是比较陌生的因此写下这篇文章你我共同理解。 二、为什么使用render函数 VUE推荐在绝大多数情况下使用template来创建我们的HTML。然而在一些场景中我们真的需要JavaScript的完全编程的能力这就是render函数它比template更接近编译器。这是官方的话 简单来说我们为什么要使用render函数呢 便是因为我们最经常使用的一个引入。 import Vue from vue; 这一个引入你看似没有任何问题但问题恰恰就是出在这。在不同版本的vue中有vue.js和vue.runtime.xxx.js这两种js文件。其中 1vue.js是完整版的vue包含核心功能模板解析器。 2vue.runtime.xxx.js是运行版vue只包含核心功能没有模板解析器。 VUE开发者为了让我们打包的文件能尽可能小一点在上述引入的是运行版vue。因为vue.runtime.xxx.js没有模板解析器所以不能使用template配置项这时候就需要使用render函数去接收到的createElement函数去指定具体内容创建html模板。 三、render函数的解析 render 函数即渲染函数它是个函数它的参数 createElement 也是个函数。 上边的代码中 render: h h(App) 这是 ES6的箭头函数的写法可以把 h 当作 createElement 的别名。所以这段代码其实相当于 render: function (createElement) {return createElement(App) } 这个函数的作用就是生成一个 VNode节点render 函数得到这个 VNode 节点之后返回给 Vue.js 的 mount 函数渲染成真实 DOM 节点并挂载到根节点上。 createElement 函数的返回值是 VNode即虚拟节点 createElement 函数的3个参数 一个 HTML 标签字符串组件选项对象或者解析上述任何一种的一个 async 异步函数。类型String | Object | Function。必需。一个包含模板相关属性的数据对象你可以在 template 中使用这些特性。类型Object。可选。子虚拟节点 (VNodes)由 createElement() 构建而成也可以使用字符串来生成“文本虚拟节点”。类型String | Array。可选 new Vue({el: #app,render:function (createElement) {//1.普通用法// createElement(标签{属性}[内容])return createElement(h2,{class:box},[hello,createElement(button,[按钮])])} })同时createElement也可以传进去一个组件因此  render: h h(App) 等同于  render:function (createElement) {return createElement(App)}
http://www.dnsts.com.cn/news/134212.html

相关文章:

  • 企业站模板招聘网站开发的流程
  • 做柱状图好看的网站中国万网张向东去哪了
  • 东莞营销型网站建设公司pc 移动的网站开发
  • ps做网站字号大小一个wordpress的爱好者
  • 中国建设银行网站u盾修改密码wordpress数据表结构
  • wordpress网站网页加密5113二次加密和三次加密
  • 哈尔滨市建设工程交易网网站字头优化
  • 网站没有百度快照idc机房
  • 做哪个网站零售最好aso优化技巧大aso技巧
  • 秦皇岛网站制作电话ysl 官网中国
  • 英文网站建设服务合同模板下载软件平台建设方案
  • 打开一个网站为繁体字是怎么做的怎么做网站评论
  • 山西省建设注册中心网站个人如何开投资公司
  • 惠州专业网站建设价格近境制作官网
  • 个人可以做社区网站推广网站公司
  • 黑龙江建筑职业技术学院招生网站网络贷款公司哪个好
  • 云南建设工程招标网站淘宝联盟自己做网站
  • 手机端网站尺寸规范网站备案需要具备什么
  • 网站 设计 趋势小白网站建设
  • 中山网站建设文化机构人物介绍网页设计
  • 西安网站关键词优化推荐做网站具体步骤
  • 专业做pe的网站深圳装饰公司前十强
  • 青岛工程建设监理公司网站公司新成立想要搭建网站怎么做
  • 做招聘网站需要什么人员wordpress主查询
  • 海口企业免费建站共享ip网站 排名影响
  • 海南网站制作潍坊网站建设价格低
  • 网站建设开发多少钱深圳做网站公
  • 山西建立网站营销策划学网站开发可以创业吗
  • 网站网页设计要求摄影工作室网站源码
  • sentos上部署.net网站旅游最新政策