Lan_megumi

Lan_megumi 查看完整档案

珠海编辑  |  填写毕业院校  |  填写所在公司/组织填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

Lan_megumi 提出了问题 · 2020-08-08

如何为自己定义的脚本写.d.ts备注文件

JS脚本结构如下面代码所示,名字姑且叫 myscr.js

// myscr.js
const a = {
    functionA(){...}
    functionB(){...}
}
const b = {
    functionA(){...}
    functionB(){...}
}
export {a, b}

那么在页面(Vue)的引入如下

// my.vue
<scrpit langt='ts'>
import { a } from './myscr'
....

我在 myscr.js同目录下建了一个 myscr.d.ts文件,

// myscr.d.ts
declare namespace a{
    function functionA(...):...
    function functionB(...):...
}

但是引入的地方my.vue是在无法读到 .d.ts 文件下写的类型信息,反而可以读到 myscr.js 下的 @param 备注...

编译的地方一直提示 myscr.d.ts is not a module
请问 .d.ts 该怎么写呢?

用的是 vue-cli3 创建的 TS vue项目,tsconfig除了

// tsconfig.json
"compilerOptions": {
    "target": "es6",
    ...
}

其他的都和原来的一样

关注 1 回答 0

Lan_megumi 回答了问题 · 2020-08-08

解决如何让d.ts声明的类型在html文件的script标签内生效

参考 https://ts.xcatliu.com/basics/declaration-files#export-1

这是一个教你如何书写 .d.ts 的文档

关注 3 回答 2

Lan_megumi 回答了问题 · 2020-03-19

微信小程序官方指南组件部分哪些是糟粕?欢迎大家来讨论

原生组件?
如果问的是原生组件的话
我选 Textarea
是我见过最坑爹的组件没有之一
逼得我直接自己重新写了个组件去替代

关注 1 回答 1

Lan_megumi 赞了回答 · 2020-03-19

有哪些微信小程序可以直接使用的UI组件?

Vant Weapp 值得试一试,提供了相当多的组件,我已经用 Vant 开发过四五个小程序了。

关注 1 回答 1

Lan_megumi 赞了文章 · 2020-03-16

手摸手,带你封装一个vue component

项目地址:vue-countTo
配套完整后台demo地址:vue-element-admin
系类文章一:手摸手,带你用vue撸后台 系列一(基础篇)
系类文章二:手摸手,带你用vue撸后台 系列二(登录权限篇)
系类文章三:手摸手,带你用vue撸后台 系列三(实战篇)
系类文章四:手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
系类文章:手摸手,带你优雅的使用 icon

为什么选择自己封装第三方库

最近几个月我司把之前两三年的所有业务都用了 vue 重构了一遍,前台使用 vue+ssr,后台使用了 vue+element,在此过程中封装和自己写了很多 vue component。其实vue 写 component 相当简单和方便,github上有很多的 vue component 都只是简单的包装了一些 jquery 或者原生 js 的插件,但我个人是不太喜欢使用这些第三方封装的。理由如下:

  1. 很多第三方封装的组件参数配置项其实是有缺损的。如一些富文本或者图表组件,配置项远比你想想中的多得多,第三方封装组件很难覆盖全部所有配置。
  2. 第三方组件的更新频率很难保证。很多第三方封装组件并不能一直和原始组件保持同步更新速度,万一原始组件更新了某个你需要的功能,但第三方并没有更新那岂不是很尴尬,而且很多第三方组件维护一段时间之后就不维护了。
  3. 灵活性和针对性。还是那富文本来说,富文本在我司有很多定制化需求,我们需要将图片上传七牛,需要将图片打水印,需要很多针对业务的特殊需求,使用第三方包装的组件是不合适的,一般基于第三方封装的组件是很难拓展的。

所以我觉得大部分组件还是自己封装来的更为方便和灵活一些。

动手开干

接下来我们一起手摸手教改造包装一个js插件,只要几分钟就可以封装一个专属于你的 vue component。封装对象:countUp.js,改造后结果 vue-countTo

首先我们用官方提供的 vue-cli 来构建项目 这里选择了 webpack-simple (组件相对而言比较简单,不需要很多复杂的功能,所以 webpack-simple 已经满足需求了)

$ npm install -g vue-cli
$ vue init webpack-simple my-project
$ cd my-project
$ npm install

安装countup.js

$ npm install countup.js
$ npm run dev

启动项目之后按照 countup.js 官方 demo 初始化插件

app.vue

<template>
  <span ref='countup'></span>
</template>

<script>
import CountUp from 'countup.js'
export default {
  name: 'countup-demo',
  data () {
    return {
      numAnim:null
    }
  },
  mounted(){
    this.initCountUp()
  },
  methods:{
    initCountUp(){
      this.numAnim = new CountUp(this.$refs.countup,0, 2017)
      this.numAnim.start();
    }
  }
}
</script>

刷新页面,就这么简单,countUp.js 已经生效了。
图片描述

接下来查看 countUp.js 的 github 发现它定义了如下可配置参数

clipboard.png

对应 vue 就是 props,类型和初始化一目了然。

props: {
  start: {
    type: Number,
    default: 0
  },
  end: {
    type: Number,
    default: 2017
  },
  decimal: {
    type: Number,
    default: 0
  },
  duration: {
    type: Number,
    default: 2.5
  },
  options: {
    type: Object
  }
}

之后再将countup之前写死的配置项替换为动态props就可以了


this.numAnim = new CountUp(this.$refs.countup, 
                           this.start,
                           this.end,
                           this.decimal,
                           this.duration,
                           this.options)

使用组件

<vue-count-up :end="2500" :duration="2.5"></vue-count-up>

只要几分钟一个属于自己的原生组件就包装好了,就是这么简单。完整demo
这时候你如果觉得使用countUp.js 还有些不满足你的需求,那你可以选择自己来造轮子了。

造轮子篇

首先当然是阅读源码
其实源码也就两部分核心代码
第一部分:主要是就是 requestAnimationFrame,在游览器不支持requestAnimationFrame 的情况下使用 setTimeout 来模拟,这段代码值得仔细阅读,自己在平时的项目中也能借鉴使用这段代码。
第二部分:就是 count 函数
看懂这两部分之后造轮子就相当的简单了, demo

造轮子过程中发现 countUp,并没有 autoplay 这个参数项可以让组件自动开始count,没关系。。。我们可以自己来撸,我们首先定义 autoplay 这个props为布尔值,默认所有组件 autoplay 为 true

 props:{
   autoplay: {
     type: Boolean,
     required: false,
     default: true
   }
 }

定义好 props 之后只要在 mounted 生命周期内加一个判断就完事了。

mounted() {
  if (this.autoplay) {
    this.start();
  }
}

我们的 countUp 组件可以自动 count 了!
clipboard.png

上传 npm

在不跨项目的情况下之前所做的已经满足需求了。但我们不能就此满足,我想让世界上更多的人来使用我的插件,这时候就要上传 npmdemo

首先我们新建一个index.js

import CountTo from './vue-countTo.vue'

// 导出模块
export default CountTo

//global 情况下 自动安装
if (typeof window !== 'undefined' && window.Vue) {
  window.Vue.component('count-to', CountTo)
}

同时我们也要改造一下 webpack 的配置,因为不是所有使用你组件的人都是通过 npm 安装使用 import 引入组件的的。

还有很多人是通过 <script> 标签的方式直接引入的,所以我们要将 libraryTarget 改为 umd 格式

library: 'CountTo',
libraryTarget: 'umd',
umdNamedDefine: true

大功告成,现在只要将它发布到 npm 就可以了,首先注册一个npm 账号,
之后配置自己的 package.json (注意填写 version,每次发布的 version 不能相同;main 为入口文件地址)。
之后只要一行命令 npm publish 你的项目就发到 npm 了,快让小伙伴们一起来用你的vue component 吧!

clipboard.png

总结

这里这是拿了一个很简单的 countUp 组件举了一个简单例子,有的时候自己动手丰衣足食,很多插件的封装比想象中简单的多。产品经理再也不会看到我因为这个fu**插件怎么不支持这个功能而愁眉苦脸了,我们可以更好地满足产品了~~
完整项目地址:https://github.com/PanJiaChen... 欢迎 star

占坑

常规占坑,这里是手摸手,带你用vue撸后台系类
完整项目地址:vue-element-admin
系类文章一:手摸手,带你用vue撸后台 系列一(基础篇)
系类文章二:手摸手,带你用vue撸后台 系列二(登录权限篇)
系类文章三:手摸手,带你用vue撸后台 系列三(实战篇)
系类文章四:手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
系类文章:手摸手,带你优雅的使用 icon
楼主个人免费圈子

查看原文

赞 230 收藏 287 评论 50

Lan_megumi 回答了问题 · 2020-03-11

vue移动端UI组件库那个号

入门用的YDUI,不过可惜了似乎不怎么维护了已经...
途中经历 Cube-ui + YDUI(部分)
到目前 Cube-ui + Vant(Popup及其他部分组件)
Cube-ui的createAPI模块和better-scroll算是我个人觉得比较有特色的地方,还有颜色自定义支持,就是Popup组件用的不太习惯,其他的都不错
而Vant相比Cube,Vant组件库更丰富,不止是组件,组件下的API也丰富,如Popup支持防止滚动穿透的功能,以及计数器Stepper,也因此我放弃了YDUI,原本使用的部分用Vant替代
另外,Vant有Vue和小程序两个版本

Cube-ui
Vant

关注 6 回答 6

Lan_megumi 回答了问题 · 2020-03-06

解决vue封装按钮时,怎么添加disabled的样式?

background: -webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));

参考
CSDN-css-背景色透明并且渐变
MDN-linear-gradient

关注 3 回答 3

Lan_megumi 关注了标签 · 2020-03-06

vue.js

Reactive Components for Modern Web Interfaces.

Vue.js 是一个用于创建 web 交互界面的。其特点是

  • 简洁 HTML 模板 + JSON 数据,再创建一个 Vue 实例,就这么简单。
  • 数据驱动 自动追踪依赖的模板表达式和计算属性。
  • 组件化 用解耦、可复用的组件来构造界面。
  • 轻量 ~24kb min+gzip,无依赖。
  • 快速 精确有效的异步批量 DOM 更新。
  • 模块友好 通过 NPM 或 Bower 安装,无缝融入你的工作流。

官网:https://vuejs.org
GitHub:https://github.com/vuejs/vue

关注 133749

Lan_megumi 关注了标签 · 2020-03-06

微信小程序

微信小程序开发工具,技巧

关注 915

Lan_megumi 回答了问题 · 2020-03-06

vue vant 数据结构

重新处理数据用 计算属性compute
内部逻辑用js写

关注 2 回答 1

认证与成就

  • 获得 9 次点赞
  • 获得 12 枚徽章 获得 0 枚金徽章, 获得 1 枚银徽章, 获得 11 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2018-06-26
个人主页被 427 人浏览