初始化项目

使用vue-cli

  • 全局安装vue-cli

    1. npm install -g @vue/cli
  • 创建uni-app

    1. vue create -p dcloudio/uni-preset-vue my-project-name
  • 安装依赖

    1. npm i
  • 运行和发布

    1. npm run dev:%PLATFORM%
    2. npm run build:%PLATFORM%

    %PLATFORM% 可取值如下:

平台
app-plus app平台生成打包资源(支持npm run build:app-plus,可用于持续集成。不支持run,运行调试仍需在HBuilderX中操作)
h5 H5
mp-alipay 支付宝小程序
mp-baidu 百度小程序
mp-weixin 微信小程序
mp-toutiao 字节跳动小程序
mp-qq qq 小程序
mp-360 360 小程序
quickapp-webview 快应用(webview)
quickapp-webview-union 快应用联盟
quickapp-webview-huawei 快应用华为

可以自定义更多条件编译平台,比如钉钉小程序,参考package.json文档

安装less

使用npm安装less即可(npm的下载源比较慢,可以使用cnpm)

less和less-loader的版本要降低,因为可能不符合情况。


使用基础css

src\assets\css\base.less

  1. @import url('./base-width.less');
  2. div {
  3. padding: 0;
  4. margin: 0;
  5. box-sizing: border-box;
  6. }

src\assets\css\base-width.less

  1. .w25b {
  2. width: 25%;
  3. }

将css引入到公共文件
src\App.vue

  1. <style lang="less">
  2. @import url(@/assets/css/base.less); // 基础样式
  3. @import url(@/assets/css/common.less); // 组件样式
  4. .app {
  5. font-family: Avenir, Helvetica, Arial, sans-serif;
  6. -webkit-font-smoothing: antialiased;
  7. -moz-osx-font-smoothing: grayscale;
  8. text-align: center;
  9. color: #2c3e50;
  10. font-size: 14px;
  11. }
  12. view {
  13. box-sizing: border-box;
  14. }
  15. /*每个页面公共css */
  16. </style>

使用字体图标

  • https://icomoon.io/中下载字体图标

  • 放入项目src\assets\css\fonts下

  • 将下载下来的style.css这个文件放到src\assets\css下,更改文件中字体图标文件的引入

    1. @font-face {
    2. font-family: 'icomoon';
    3. src: url('~@/assets/css/fonts/icomoon.eot?vwddx');
    4. src: url('~@/assets/css/fonts/icomoon.eot?vwddx#iefix') format('embedded-opentype'),
    5. url('~@/assets/css/fonts/icomoon.ttf?vwddx') format('truetype'),
    6. url('~@/assets/css/fonts/icomoon.woff?vwddx') format('woff'),
    7. url('~@/assets/css/fonts/icomoon.svg?vwddx#icomoon') format('svg');
    8. font-weight: normal;
    9. font-style: normal;
    10. font-display: block;
    11. }

使用封装的日期的JS

src\utils\DatePrototype.js

  1. /* ================================= date start ======================================== */
  2. /**
  3. * 对Date的扩展,将 Date 转化为指定格式的String
  4. * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符
  5. * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
  6. * eg:
  7. * (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
  8. * (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04
  9. * (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04
  10. * (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04
  11. * (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
  12. */
  13. // eslint-disable-next-line no-extend-native
  14. Date.prototype.pattern = function (fmt) {
  15. var o = {
  16. 'M+': this.getMonth() + 1, // 月份
  17. 'd+': this.getDate(), // 日
  18. 'h+': this.getHours() % 12 === 0 ? 12 : this.getHours() % 12, // 小时
  19. 'H+': this.getHours(), // 小时
  20. 'm+': this.getMinutes(), // 分
  21. 's+': this.getSeconds(), // 秒
  22. 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
  23. S: this.getMilliseconds() // 毫秒
  24. };
  25. var week = {
  26. 0: '/u65e5',
  27. 1: '/u4e00',
  28. 2: '/u4e8c',
  29. 3: '/u4e09',
  30. 4: '/u56db',
  31. 5: '/u4e94',
  32. 6: '/u516d'
  33. };
  34. if (/(y+)/.test(fmt)) {
  35. fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
  36. }
  37. if (/(E+)/.test(fmt)) {
  38. fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '/u661f/u671f' : '/u5468') : '') + week[this.getDay() + '']);
  39. }
  40. for (var k in o) {
  41. if (new RegExp('(' + k + ')').test(fmt)) {
  42. fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
  43. }
  44. }
  45. return fmt;
  46. };

在src\main.js引入

  1. import '@/utils/DatePrototype'; // 引入日期操作

封装公共组件库

src\plugin\componentGlobal.js

  1. export default {
  2. install (Vue) {
  3. // register globally 注册到全局
  4. // Vue.component('svg-icon', SvgIcon);
  5. }
  6. };

src\main.js

  1. // 引入全局组件库
  2. import componentGlobal from '@/plugin/componentGlobal.js';
  3. Vue.use(componentGlobal);

使用vue组件

src\components\base\BaseModule.vue

  1. <template>
  2. <view class="fixedDiv">
  3. <slot name="content"></slot>
  4. </view>
  5. </template>
  6. <script>
  7. export default {
  8. };
  9. </script>
  10. <style lang="less" scoped>
  11. .fixedDiv {
  12. display: flex;
  13. align-items: center;
  14. justify-content: center;
  15. }
  16. </style>

使用

  1. import BaseModule from '@/components/base/BaseModule.vue';
  2. components: { BaseModule },
  3. <base-module></base-module>

在使用组件的时候,样式必须要写在组件的上面,因为在生成微信小程序的代码的时候,使用的组件的那个标签是不会被去除的。如果不写在组件名称的上面会导致页面样式崩溃

页面相关

添加页面路由

src\pages.json
参考:配置参考地址

  1. {
  2. "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
  3. {
  4. "path": "pages/index/index",
  5. "style": {
  6. // "navigationBarTitleText": "签到"
  7. "topWindow": false // 当前页面不显示 topWindow
  8. }
  9. },
  10. {
  11. "path": "pages/editTag/index", // 路径
  12. "style": {
  13. "navigationBarTitleText": "管理我的自律项"
  14. }
  15. }
  16. ],
  17. "globalStyle": {
  18. "navigationBarTextStyle": "black",
  19. "navigationBarTitleText": "签到",
  20. "navigationBarBackgroundColor": "#F8F8F8",
  21. "backgroundColor": "#F8F8F8"
  22. }
  23. }

页面跳转

  1. 使用标签跳转
    1. <navigator url="/pages/editTag/index">编辑+</navigator>

页面元素相关

参考:页面元素参考地址页面使用vue的参考

input和软键盘的触发使用

  1. <input placeholder-class="input-placeholder" enterkeyhint="done" :hold-keyboard="true" :focus="addTagInputFocus" v-model="addTagText" ref="addTagInput" type="text" name="" id="" placeholder="请输入新建的自律项" cursor-spacing="10">
  2. <text class="icon-deleteInput icon" v-show="addTagText" @touchend.prevent="delTagText"></text>
  3. // 使用 @touchend.prevent阻止默认事件
  4. // 输入框展示
  5. addTag () {
  6. this.addTagStatus = true;
  7. this.$nextTick(() => {
  8. // 输入框获取焦点
  9. this.addTagInputFocus = true;
  10. });
  11. },
  12. // 删除输入框内容的按钮
  13. delTagText () {
  14. this.addTagText = '';
  15. },