关于vue-cli3:vuecli3elementplus-从菜单渲染浅谈动态渲染Vue组件的问题

1. 对于Element-plus的菜单渲染问题跨过了Element-UI,终于来到了Element-plus。又回到了一个老问题,menu的渲染。创立一个menu数组,利用v-for来渲染数组,生成menu,十分惯例的操作。然而操作的过程中,呈现了一个小问题,就是对于icon的渲染。咱们晓得,在Element-plus中,渲染一个带图标的菜单项,是这么搞的: <el-menu-item index="/mypath"> <template #title> <el-icon><Odometer /></el-icon> <span>title</span> </template></el-menu-item>icon图标是间接以一个组件的模式进行渲染的。那么,当咱们希图利用v-for进行列表渲染的时候,这个图标的组件怎么渲染进去,成了个难题。间接用双花括号{{}}必定是不行的,间接会把标签搞成文本。用v-html也不行,它只能渲染原生的HTML标签。WTF? 2. 如何能力动静的把自定义组件渲染进去?在<template></template>外面搞模版语法是行不通了。那就只能尝试走其余的路线了。在搜索引擎欢快的与海量信息格斗之后,找到了切入点:render函数。诚实说,其实早就该想到这个了,毕竟组件渲染就这么两条路嘛。奈何对render的应用频率太低了,选择性的搞遗记了。那么来尝试吧。写一个组件,通过props接管到图标的标签写法,而后渲染进去。 //留神在vue3中,render函数中不再有参数了,h函数须要按需加载。import { h } from 'vue';export default{ props: { //Odometer html: String }, render(){ return h('el-icon', null, h(this.html)); }}果不其然没有达到成果。罕用vue做开发的小伙伴必定一眼就发现了一个问题:用h函数生成虚构DOM节点时,如果要生成的是组件,则第一个参数间接应用导入的组件即可。如果应用字符串,会一成不变的把字符串当做HTML标签渲染,而不是当作组件渲染。(参考链接) 批改一下: import { h } from 'vue';import { ElIcon } from 'element-plus';export default{ props: { //Odometer html: String }, components: { ElIcon }, render(){ return h(ElIcon, null, h(this.html)); }}还是不对呀,图标名称是传过来的字符串,没法间接获取到导入的组件呀。吓得我连忙又翻了一下文档,在最初一行找到了这么一句话: 如果一个组件是用名字注册的,不能间接导入 (例如,由一个库全局注册),能够应用 resolveComponent() 来解决这个问题。原来如此。。。好了,给出最终答案: <el-menu-item :index="item.path"> <template #title> <DynamicIcon :html="item.icon"></DynamicIcon> <span>{{item.title}}</span> </template></el-menu-item>//DynamicIconimport { h, resolveComponent } from 'vue';import { Odometer, ChatDotRound } from '@element-plus/icons-vue';export default{ props: { //Odometer html: String }, components: { Odometer, ChatDotRound }, render(){ //ElIcon间接全局全局导入了 const IconBox = resolveComponent('ElIcon'); const Icon = resolveComponent(this.html); return h(IconBox, null, h(Icon)); }}3. 总结最初总结一下子吧。想要动静渲染组件,就须要利用props与render函数。在应用h函数的时候,生成组件的虚构vnode,要间接应用导入的组件。如果只能获取一个组件名称,那么就用resolveComponent函数手动解析注册的组件。 ...

November 8, 2022 · 1 min · jiezi

关于vue-cli3:基于-Vue3-打造前台中台通用提效解决方案完整无密

download:基于 Vue3 打造前台+中台通用提效解决方案残缺无密揭秘 Kotlin 1.6.20 重磅功能 Context Receivers 这篇文章咱们一起来聊一下 Kotlin 1.6.20 的新功能 Context Receivers,来看看它为咱们解决了什么问题。 通过这篇文章将会学习到以下内容: 扩大函数的局限性什么是 Context Receivers,以及如何使用Context Receivers 解决了什么问题引入 Context Receivers 会带来新的问题,咱们如何解决Context Receivers 利用范畴及注意事项扩大函数的局限性在 Kotlin 中承受者只能利用在扩大函数或者带承受者 lambda 表达式中, 如下所示。 class Context { var density = 0f}// 扩大函数inline fun Context.px2dp(value: Int): Float = value.toFloat() / density复制代码承受者是 fun 关键字之后和点之前的类型 Context,这里藏匿了两个学识点。 咱们可能像调用外部函数一样,调用扩大函数 px2dp(),通常拆散 Kotlin 作用域函数 with , run , apply 等等一起使用。with(Context()) { px2dp(100)}复制代码在扩大函数外部,咱们可能使用 this 关键字,或者藏匿关键字隐式拜访外部的成员函数,然而咱们不能拜访公有成员扩大函数使用起来很便利,咱们可能对系统或者第三方库进行扩大,然而也有局限性。 只能定义一个承受者,因此限度了它的可组合性,如果有多个承受者只能当做参数传送。比如咱们调用 px2dp() 方法的同时,往 logcat 和 file 中写入日志。class LogContext { ...

May 12, 2022 · 2 min · jiezi

关于vue-cli3:antd-vue-在-vueconfigjs中-自定义主题颜色定制主题vuecli3

我在 自定义less变量 时,less、less-loader的版本号不同,会报奇怪的谬误此篇,定制主题 也会依据版本号报不同的谬误最终!我选用的版本 less@3.0.4、less-loader@5.0.0这篇也基于 less@3.0.4 、less-loader@5.0.0 进行定制主题操作一、vue.config.js文件module.exports = { // 减少这部分代码 css: { requireModuleExtension: true, loaderOptions: { less: { modifyVars: { // less vars,customize ant design theme 'primary-color': '#6F48FF', 'link-color': '#6F48FF' }, // do not remove this line javascriptEnabled: true } } } }下面的 modifyVars 参数能够自定义各种主题色,以下是罕用的几种: @primary-color: #1890ff; // 全局主色@link-color: #1890ff; // 链接色@success-color: #52c41a; // 胜利色@warning-color: #faad14; // 正告色@error-color: #f5222d; // 谬误色@font-size-base: 14px; // 主字号@heading-color: rgba(0, 0, 0, 0.85); // 题目色@text-color: rgba(0, 0, 0, 0.65); // 主文本色@text-color-secondary: rgba(0, 0, 0, 0.45); // 次文本色@disabled-color: rgba(0, 0, 0, 0.25); // 生效色@border-radius-base: 4px; // 组件/浮层圆角@border-color-base: #d9d9d9; // 边框色@box-shadow-base: 0 2px 8px rgba(0, 0, 0, 0.15); // 浮层暗影也能够点击查看 所有款式变量 ...

November 30, 2021 · 1 min · jiezi

关于vue-cli3:自定义Vuecli项目模板

模板构造次要包含四个局部: preset.jsonprompts.jsgenerator/index.jstemplate/preset.jsonpreset.json 中是一个蕴含创立新我的项目所需预约义选项和插件的 JSON 对象,让用户无需在命令提醒中抉择它们,简称预设; prompts.js交互式的告知vue create所需,是依据用户应用需要自定义设置的信息。 定义格局参考Inquirer 问题格局的数组(Inquirer官网文档) generator.jsgenerator.js 导出一个函数,这个函数接管三个参数 一个 GeneratorAPI 实例 提供一系列的API管制最终输入的目录构造及内容自定义模版必然用到 GeneratorAPI 的 render() 办法用户自定义的设置选项 即:用户对 prompts.js 中问题所提供的答案整个 preset 预设信息简略的自定义模板示例创立我的项目手动创立目录构造: |- vue-template |- generator |- index.js |- preset.json |- prompts.js获取preset.json模板先用 vue create 去创立一个我的项目,而后把你的预设信息保留下来,到指定目录下查找预设信息: # Unix~/.vuerc# windowsC://用户/<username>/.vuerc{ "useTaobaoRegistry": false, "latestVersion": "4.5.14", "lastChecked": 1634820758861, "packageManager": "npm", "presets": { "v2": { "useConfigFiles": true, "plugins": { "@vue/cli-plugin-babel": {}, "@vue/cli-plugin-typescript": { "classComponent": false, "useTsWithBabel": true }, "@vue/cli-plugin-router": { "historyMode": false }, "@vue/cli-plugin-vuex": {}, "@vue/cli-plugin-eslint": { "config": "prettier", "lintOn": [ "save", "commit" ] } }, "vueVersion": "2", "cssPreprocessor": "dart-sass" } }}其中,presets 保留的就是预设信息,v2 是保留预设起的别名,咱们的preset.json 须要的就是 v2 的值,所以preset.json 中的内容就是这样 ...

October 26, 2021 · 2 min · jiezi

关于vue-cli3:vuecli-elementui-环境变量与模式

1.环境变量的设置vue-cli3中,通过在根目录下设置.env[.mode]文件,来设置环境变量。在文件中,通过 键=值 设置不同的环境变量。 //.envVUE_APP_API_BASEURL = 'a.com'But 只有以VUE_APP_结尾的变量,才会被webpack.DefinePlugin动态嵌入到客户端侧的包中,作为全局变量应用。应用形式为: let api = process.env.VUE_APP_API_BASEURL;2.模式通过传递 --mode 选项参数为命令行覆写默认的模式。 //package.json{ "scripts": { "dev-build": "vue-cli-service build --mode development" }}能够通过为 .env 文件减少后缀来设置某个模式下特有的环境变量。比方在development模式下,只会加载文件env.development内的环境变量。 3.常见应用场景切换环境对应的api接口。比方,在.env.development文件中设置测试环境api的根底门路,在.env.production文件中设置生产环境api的根底门路。这样,通过应用--mode给命令行设置不同的模式,就能够让打包好代码在不同环境下切换api根底门路。

December 2, 2020 · 1 min · jiezi

关于vue-cli3:vuecli3运行npm-run-serve报错

vuecli3运行npm run serve报错1.开发环境 vuecli32.电脑系统 windows10专业版3.在应用vuecli3开发的过程中,咱们输出 npm run serve可能会遇到一报错,上面我来分享一下我遇到的问题和解决办法,心愿对你有所帮忙。4.输出 npm run serve 报错如下:4-1.看到以上报错,在网上查阅了大量的材料还是无奈解决,于是,开始本人尝试去剖析以及解决,我的项目在运行的时候,会先执行 vue.config.js,如果你的这个文件配置有问题的话,我的项目就无奈运行,首先查看 vue.config.js,代码如下: 刚开始看的时候,你会感觉没有问题,然而在这里咱们的一个配置被正文了,就是 target ,当咱们把这个配置正文开之后,成果如下:5.本期的分享到了这里就完结啦,心愿对你有所帮忙,让咱们一起致力走向巅峰~!

November 17, 2020 · 1 min · jiezi

关于vue-cli3:vuecli3使用本地彩色icon

vuecli3应用本地黑白icon1.开发环境 vuecli32.电脑系统 windows10专业版3.在应用vuecli3开发的过程中,咱们常常会应用到 icon,然而应用失常的办法,你会发现引入的图标是没有色彩的,上面我来分享一下应用办法,心愿对你有所帮忙!4.将图标下载到本地5.删除红框局部5-1:除了以下这些文件,其余的文件都能够删除6.把其余文件,复制到本人的我的项目中,在assets中新建文件并且把方才拷贝的文件放到新建目录下,构造如下:7.在main.js中增加如下代码: import './assets/chenicon/iconfont.css';import './assets/chenicon/iconfont.js';//进行全局导入,这样我的所以组件中都能够应用;如果整个我的项目只有一个页面应用了,能够单个页面进行导入//留神:如果应用黑白图标,须要引入 iconfont.js文件8.在vue组件中应用办法,增加如下代码: <svg class="icon" aria-hidden="true"> <use xlink:href="#icongouwuche"></use></svg><svg class="icon" aria-hidden="true"> <use xlink:href="#iconyemian-copy"></use></svg>//留神: href 中 # 前面就是 icon 类名8-1:在App.vue增加如下代码: .icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden;}9.成果如下: //比照,咱们 阿里巴巴矢量图我的项目中的图标/色彩 截然不同。10.本期的教程到了这里就完结啦,是不是很nice,心愿对你有所帮忙,让咱们一起致力走向巅峰!

November 14, 2020 · 1 min · jiezi

关于vue-cli3:PC端只对指定页面做自适应vuepostcsspxtorem

一、postcss-pxtorem装置npm install -S postcss-pxtorem二、rem 配置## rem.jsfunction setRem() { `// 基准大小 const baseSize = 100; const baseScale = baseSize / 1920; // 1920的设计图 let widthScale = window.innerWidth; // 以后窗口的宽度 const heightScale = window.innerHeight; // 以后窗口的高度 // 尺寸换算 const comparedHeight = (widthScale * 1080) / 1920; if (heightScale < comparedHeight) { widthScale = (heightScale * 1920) / 1080; } // 计算理论的rem值,失去该宽度下的相应font-size值,并赋予给html的font-size, const rem = widthScale * baseScale; document.documentElement.style.fontSize = ${rem}px;}// 初始化setRem();// 扭转窗口大小时从新设置 remwindow.onresize = () => { setRem();};`三、在main.js外面引入import './utils/rem';四、配置postcss-pxtorem### 根目录的postcss.config.js`module.exports = { plugins: { autoprefixer: {}, 'postcss-pxtorem': { rootValue: 100, minPixelValue: 12, propList: ['*'], exclude: (e) => { if (/src(\\|\/)views(\\|\/)Screen/.test(e)) { return false; } return true; }, }, },};`五、疏忽单个属性的形式(不转换rem)1、配置propList: ['*', '!border', '!font-size'], 2、像素单元申明中应用大写 .rank-list__text { width: 300Px; }六、参考文档1、https://www.npmjs.com/package/postcss-pxtorem2、https://www.njleonzhang.com/2018/08/15/flexible-pc-full-screen.html3、https://www.cnblogs.com/WhiteM/p/12720849.html

November 13, 2020 · 1 min · jiezi

关于vue-cli3:vuecli3配置postcssloader使用BEM

网上找了很多文章,但也没看到几个是实用的,而且很多是2017年左右的文章,用到的技术postcss-cssnext曾经被弃用,目前应用postcss-preset-env替换,但这个插件不欠缺,或者是我没找到解决办法,存在一部分问题,但应用BEM写法是没什么问题的。BEM写法示例:<template> <div class="ga-home__container"> ... </div></template><style> @component-namespace ga { @b home { @e container { width: 100%; height: 100%; color: #a2eeff; } }} </style>vue2.x配置BEM应用到插件postcss-salad进行配置;在目录.postcssrc.js,配置postcss-salad即可; // 应用的版本号// "postcss": "^5.2.17",// "postcss-salad": "^1.0.8",// .postcssrc.jsvar salad = require('postcss-salad')module.exports = { "plugins": [ // to edit target browsers: use "browserlist" field in package.json salad({ browser: ['ie > 9', 'last 2 version'], features: { 'bem': { 'shortcuts': { 'component': 'b', 'modifier': 'm', 'descendent': 'e' }, 'separators': { 'descendent': '__', 'modifier': '--' } } } }) ]}vue-cli3配置BEM写法应用到的插件postcss-bem-fix、postcss-preset-env;【留神】:postcss-bem比方旧版,目前舍不得postcss-bem-fix能够查看以下文章:《postss-bem version is too low》《弃用cssnext》 ...

November 5, 2020 · 1 min · jiezi

关于vue-cli3:vuecli3搭建项目

一、nodejs装置和淘宝镜像装置下载网站:https://nodejs.org/en/ (一路next即可) 查看node 版本 node -v永恒应用淘宝镜像命令: npm config set registry https://registry.npm.taobao.org二、vue-devtools 装置及应用vue-devtools是一款基于chrome浏览器的插件,用于调试vue利用,这能够极大地提高咱们的调试效率。接下来咱们就介绍一下vue-devtools的装置。(1)chrome商店间接装置vue-devtools能够从chrome商店间接下载安装 (2)手动装置① 找到vue-devtools的github我的项目,并将其clone到本地. vue-devtoolsgit clone https://github.com/vuejs/vue-devtools.git② 装置我的项目所须要的npm包npm install③ 编译我的项目文件npm run build④ 增加至chrome浏览器浏览器输出地址"chrome://extensions/"进入扩大程序页面,点击"加载已解压的扩大程序..."按钮,抉择vue-devtools>shells下的chrome文件夹。 如果看不见“加载已解压的扩大程序...”按钮,则须要勾选“开发者模式”。 三、vue-cli 装置及应用(1) 装置vue-clinpm install @vue/cli -g(2) 创立一个我的项目vue create <Project Name>` `//文件名 不反对驼峰(含大写字母)具体操作如下:1.抉择一个preset(预设)① 除最初两个选项,其余选项都是你之前保留的预设配置(如下图第一个 " my-default " 是之前保留的预设配置,当初就能够间接用了) ② 如果没有配置保留过,则只有以下两个选项: default(babel,eslint):默认设置(间接enter)适宜疾速创立一个新我的项目的原型,没有带任何辅助性能的 npm包Manually select features:自定义配置(按方向键 ↓)是咱们所须要的面向生产的我的项目,提供可选性能的 npm 包 2.自定义配置须要抉择你须要的配置项 ? Check the features needed for your project: >( ) Babel //转码器,能够将ES6代码转为ES5代码,从而在现有环境执行。( ) TypeScript// TypeScript是一个JavaScript(后缀.js)的超集(后缀.ts)蕴含并扩大了 JavaScript 的语法,须要被编译输入为 JavaScript在浏览器运行,目前较少人再用( ) Progressive Web App (PWA) Support// 渐进式Web应用程序( ) Router // vue-router(vue路由)( ) Vuex // vuex(vue的状态管理模式)( ) CSS Pre-processors // CSS 预处理器(如:less、sass、stylus)( ) Linter / Formatter // 代码格调检查和格式化(如:ESlint)( ) Unit Testing // 单元测试(unit tests)( ) E2E Testing // e2e(end to end) 测试3. 抉择对应性能的具体工具包① 是否应用history router ...

August 18, 2020 · 2 min · jiezi

关于vue-cli3:解决Vue-Cli-3vuecli运行项目eslint报错nooctalescapejs41

明天应用vue cli 3来搭建vue环境。同时vue ui第一次应用图形界面创立我的项目,一切顺利,我的项目创立胜利。npm run serve...呈现了下图报错:(node_moduleseslintlibrulesno-octal-escape.js:41)度到第一篇解决办法《vue-cli工程启动异样问题:no-octal-escape.js:41》,依照其说的第二种办法,升高了eslint版本,再次运行我的项目,报错仍旧。接着又第二篇解决办法,临时敞开了eslint,躲避了报错《新版vue脚手架敞开eslint》须要在我的项目根目录下新建一个vue.config.js module.exports = { lintOnSave: false}

August 13, 2020 · 1 min · jiezi

关于vue-cli3:vuecli3-libflexiblepostcsspxtorem-适配pc端大屏分辨率

vue-cli3脚手架 lib-flexible+postcss-pxtorem 适配pc端大屏分辨率我的我的项目是cli3构建,iviewUI框架,UI设计稿是1920*10801.装置lib-flexible postcss-pxtorem 插件 npm install lib-flexible postcss-pxtorem --save2.在 main.js 文件中引入 import 'lib-flexible/flexible.js'3.新建 postcss.config.js 或者在package.json中写入 module.exports = { plugins: { autoprefixer: {}, "postcss-pxtorem": { "rootValue": 192,// 设计稿宽度或者目前失常分辨率的1/10 selectorBlackList: [".ivu"],// 要疏忽的选择器并保留为px。 minPixelValue: 2,// 设置要替换的最小像素值。 "propList": [ "*" ]// 须要做转化解决的属性,如`hight`、`width`、`margin`等,`*`示意全副 } }} 4.找到 node_modules/lib-flexible/flexible.js 批改源文件(作者写死了宽度) function refreshRem(){ var width = docEl.getBoundingClientRect().width; if (width / dpr > 540) { //width = 540 * dpr; //获取屏幕宽度,如果宽度大于540,被写死了 width = width * dpr; //获取屏幕宽度 } var rem = width / 10; //缩放比例能够按理论来 docEl.style.fontSize = rem + 'px'; flexible.rem = win.rem = rem; }我的屏幕是宽度1440,这样就能够了 ...

July 20, 2020 · 1 min · jiezi