首次vue开发总结

项目很简单,就3个页面,第一个页面是一个list 点击进入另外一个对应的list,第3页是详情。

1.目录结构

自己写的代码放在src中
static文件中的js 可以在index中直接引入
src中
base 放一些基础组件 如 顶部条 滚动组件
common 放的是一些通用的方法 如 httprequest backPage
components 放的是组成页面的组件 如 列表页 详情页
我自己创建了一个config文件夹 用来存放 isNative ip 这种不同环境不同值的变量

2.结构 → 最终www包

App.vue 通过 main.js 替换掉了 index 的 id为app 的 div 具体貌似是webpack做的 不太清楚
在根目录下的config中的index里 修改打包编译后的 www根目录 和 index 的位置

build: {
    // Template for index.html
    index: path.resolve(__dirname, '../../www/index.html'),

    // Paths
    assetsRoot: path.resolve(__dirname, '../../www'),
    assetsSubDirectory: '',
    assetsPublicPath: '',

    /**
     * Source Maps
     */

    productionSourceMap: false,
    ........
    ........
  }

3.开发环境

公司的hybrid环境,需要在pageReady后,先登录用户,再做后面的操作。
封装 pageReady 就需要cordova.js 由于cordova本身是原生那边开发的 模块化内部有路径要求 所以没有敢往static里放
防止出现路径错误,直接在index中引入,打包之后将 cordova.js 和plugin文件夹 放入了根目录www里的js中。
之后由于是main.js 中 实例化的 el:app vue , 所以在这之前进行autoLogin,promise完美解决。

4.路由配置

在 components文件夹中 创建3个页面的组件
在router文件夹中的index.js里配置
import 引入 写入routers里 就算注册了
在app.vue 中 引入 router-view 标签

路由跳转方法:

this.$router.push({
          path: '/errorInfo'
        })

路由返回方法:

this.$router.back(-1)

5.组件开发

5.1组件传值

开始以为vuex可以完全代替props,但其实这种理解是不对的,组件可以看做是一个函数,通过props传值相当于给函数传参,实现相同的组件展示的内容,甚至表达出的功能不同;比如scroll组件,可以有上拉刷新 下拉加载功能 也可以没有。
父传子 :组件标签中 增加属性 v-bind:子组件内变量名字='父组件变量名字'
方法:@子组件中 emit('调用时候的方法名字')='父组件中方法名字' 子组件中的调用 this.emit('调用时候的方法名字')
父组件中:

<scroll
              :data="dataArr"
              :backgroundColor="scrollBgc"
              :pulldown="pulldown"
              @pulldown="pulldownRefresh"
              :pullup="pullup"
              @pullup="pullupAdd"
              :bottomTip="bottomTip"
      >

子组件中:

props: {
      pullup: {
        type: Boolean,
        default: false
      }
},
methods: {
      this.$emit('pulldown')
}

5.2 $nextTick()

项目中有这样个地方:有一个类似进度条的东西,展示一个进度;进度条的长度 = 进度总长度*数据计算出来的系数;由于不同的视口宽度不同,那么进度总长度是要在dom渲染之后才知道的。
$nextTick()方法接收一个回调函数,在dom渲染后执行,此时获取进度总长度,然后修改一个变量,通过watch该变量,再次渲染页面,修改进度条长度。

6.Promise

getDataTest() {
        let obj = {
          page: this.pageNumber,
          flag: "process"
        }
        console.log('发送请求')
        let p = new Promise((resolve, reject) => {
          httpRequest(obj, 'smg', 0, (res) => {
            resolve()
            //console.log(this.dataArr)
          },  (err) => {
            reject()
            alert(err)
          })
        })
        return p

        //return httpRequestPromise(obj, 'smg', 0)
      },
  1. new Promise 会直接执行Promise中的回到函数,所以封装在一个函数中 返回Promise 实例
  2. then方法中的参数 是 resolve的参数 catch方法的参数 是reject的参数
  3. 如果后面的then也要使用resolve的参数 需要在前一个then方法的回调里返回参数
  4. then方法中的代码如果有异步代码 那么也会在同步代码执行后执行,如果想多个异步方法按顺序执行,需要封装多个Promosi实例

7.组件的生命周期

后续再补....

问题:
1.如何让axios返回promise 如何让httprequest是一个promise
axios本身就是封装好的Promise请求 axios()本身就是一个Promise实例 直接返回即可调用then()
2.axios post的信息 query string parameters 和 request payload区别是什么
axios post参数有2种方法:
param:{} 和 data: {}
param是把参数包含在url中 , 在headers中是 query string parameters
data 是把参数单独发送给后台,在headers中是 request payload

不足点:
scroll组件 下拉刷新 上拉加载 可以通过solt更完美
比较多的地方不符合开放封闭原则
页面没有做缓存,之前进去过的页面,再次进入,还是会加载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • # 传智播客vue 学习## 1. 什么是 Vue.js* Vue 开发手机 APP 需要借助于 Weex* Vu...
    再见天才阅读 9,089评论 0 6
  • title: promise总结 总结在前 前言 下文类似 Promise#then、Promise#resolv...
    JyLie阅读 14,216评论 1 21
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 8,207评论 1 4
  • “看,那个推车的女人,她一个人带三个女儿,不容易啊” 深圳的五月份,对于我这个北方人来讲,已经足够热了,因为一个朋...
    智在必得丶阅读 4,114评论 0 0
  • 今天是2017年的第一天,我相信很多人在这一天都会订下自己今年的目标,希望在新的一年里自己能够越来越好,跟2016...
    午米阅读 14,201评论 116 724

友情链接更多精彩内容