Vue+Vux项目实践完整代码


Posted in Javascript onNovember 30, 2017

提供完整的路由,services`````````````

   ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

index.html

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
  <title>insurance-weixin</title>
 </head>
 <body>
  <div id="app-box"></div>
  <!-- built files will be auto injected -->
 </body>
</html>

   ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

main.js

import Vue from 'vue'
import Vuex from 'vuex'
import VueRouter from 'vue-router'
import FastClick from 'fastclick'
import {WechatPlugin, AjaxPlugin, LoadingPlugin, ToastPlugin, AlertPlugin} from 'vux'
import App from './app.vue'
/**
 * 加载插件
 */
Vue.use(Vuex)
Vue.use(VueRouter)
Vue.use(WechatPlugin)
Vue.use(AjaxPlugin)
Vue.use(LoadingPlugin)
Vue.use(ToastPlugin)
Vue.use(AlertPlugin)
/**
 * 定义常量
 */
const domainName = 'localhost:8010'
const serverName = 'localhost:3000'
const apiPrefix = serverName + '/api/outer'
const loginTimeOutErrorCode = 'login_timeout_error'
/**
 * 设置vuex
 */
const store = new Vuex.Store({})
store.registerModule('vux', {
 state: {
  loading: false,
  showBack: true,
  title: ''
 },
 mutations: {
  updateLoading (state, loading) {
   state.loading = loading
  },
  updateShowBack (state, showBack) {
   state.showBack = showBack
  },
  updateTitle (state, title) {
   state.title = title
  }
 }
})
/**
 * 设置路由
 */
const routes = [
 // 初始页
 {
  path: '/',
  component: function (resolve) {
   require(['./components/init.vue'], resolve)
  }
 },
 // 主页
 {
  path: '/index',
  component: function (resolve) {
   require(['./components/index.vue'], resolve)
  },
  children: [
   // 测试页
   {
    path: 'test',
    component: function (resolve) {
     require(['./components/tests/page.vue'], resolve)
    }
   }
  ]
 },
 // 绑定页
 {
  path: '/bind',
  component: function (resolve) {
   require(['./components/bind.vue'], resolve)
  }
 }
]
const router = new VueRouter({
 routes
})
router.beforeEach(function (to, from, next) {
 store.commit('updateLoading', true)
 store.commit('updateShowBack', true)
 next()
})
router.afterEach(function (to) {
 store.commit('updateLoading', false)
})
/**
 * 点击延迟
 */
FastClick.attach(document.body)
/**
 * 日志输出开关
 */
Vue.config.productionTip = true
/**
 * 定义全局公用常量
 */
Vue.prototype.domainName = domainName
Vue.prototype.serverName = serverName
Vue.prototype.apiPrefix = apiPrefix
/**
 * 定义全局公用方法
 */
Vue.prototype.http = function (opts) {
 let vue = this
 vue.$vux.loading.show({
  text: 'Loading'
 })
 vue.$http({
  method: opts.method,
  url: apiPrefix + opts.url,
  headers: opts.headers || {},
  params: opts.params || {},
  data: opts.data || {}
 }).then(function (response) {
  vue.$vux.loading.hide()
  opts.success(response.data.data)
 }).catch(function (error) {
  vue.$vux.loading.hide()
  if (!opts.error) {
   let response = error.response
   let errorMessage = '请求失败'
   if (response && response.data) {
    if (response.data.code === loginTimeOutErrorCode) {
     window.location.href = '/'
    }
    errorMessage = response.data.message
   }
   vue.$vux.alert.show({
    title: '提示',
    content: errorMessage
   })
  } else {
   opts.error(error.response.data.data)
  }
 })
}
Vue.prototype.get = function (opts) {
 opts.method = 'get'
 this.http(opts)
}
Vue.prototype.post = function (opts) {
 opts.method = 'post'
 this.http(opts)
}
Vue.prototype.put = function (opts) {
 opts.method = 'put'
 this.http(opts)
}
Vue.prototype.delete = function (opts) {
 opts.method = 'delete'
 this.http(opts)
}
Vue.prototype.valid = function (opts) {
 let vue = this
 let valid = true
 if (opts.ref && !opts.ref.valid) {
  valid = false
 }
 if (opts.ignoreRefs) {
  let newRefs = []
  for (let i in opts.refs) {
   let ref = opts.refs[i]
   for (let j in opts.ignoreRefs) {
    let ignoreRef = opts.ignoreRefs[j]
    if (ref !== ignoreRef) {
     newRefs.push(ref)
    }
   }
  }
  opts.refs = newRefs
 }
 for (let i in opts.refs) {
  if (!opts.refs[i].valid) {
   valid = false
   break
  }
 }
 if (valid) {
  opts.success()
 } else if (opts.error) {
  opts.error()
 } else {
  vue.$vux.toast.show({
   text: '请检查输入'
  })
 }
}
Vue.prototype.closeShowBack = function () {
 this.$store.commit('updateShowBack', false)
}
Vue.prototype.updateTitle = function (value) {
 this.$store.commit('updateTitle', value)
}
/**
 * 创建实例
 */
new Vue({
 store,
 router,
 render: h => h(App)
}).$mount('#app-box')
app.vue
<template>
 <div id="app">
  <loading v-model="isLoading"></loading>
  <transition>
   <router-view></router-view>
  </transition>
 </div>
</template>
<script>
 import {Loading} from 'vux'
 import {mapState} from 'vuex'
 export default {
  name: 'app',
  components: {
   Loading
  },
  computed: {
   ...mapState({
    isLoading: state => state.vux.isLoading
   })
  }
 }
</script>
<style lang="less">
 @import '~vux/src/styles/reset.less';
 body {
  background-color: #fbf9fe;
 }
</style>
components/index.vue
<template>
 <div style="height:100%;">
  <top style="margin-bottom:46px"></top>
  <transition>
   <router-view></router-view>
  </transition>
  <bottom></bottom>
 </div>
</template>
<script>
 import Top from './layouts/top.vue'
 import Bottom from './layouts/bottom.vue'
 export default {
  components: {
   Top,
   Bottom
  }
 }
</script>
<style>
 html, body {
  height: 100%;
  width: 100%;
  overflow-x: hidden;
 }
</style>
components/tests/page.vue
<template>
 <div>
  <page @loadMore="loadMore" @refresh="refresh">
   <div>
    <p v-for="i in n">placeholder {{i}}</p>
   </div>
  </page>
 </div>
</template>
<script>
 import Page from '../kits/page.vue'
 import {cookie} from 'vux'
 export default {
  components: {
   Page
  },
  created () {
   let vue = this
   vue.closeShowBack()
   vue.updateTitle('测试页面'),
   //获取常量
    console.log(0)
   vue.get({
    url: '/test/constants',
    headers: {
     'token': cookie.get('token')
    },
    success: function (data) {
     cookie.set('constants',JSON.stringify(data),{
      expires: 1
     })
    }
   })
  },
  data () {
   return {
    n: 10,
   }
  },
  methods: {
   loadMore () {
    this.n += 10
   },
   refresh () {
    this.n = 10
   },
  }
 }
</script>

components/tests/page.vue代码中的 import Page from '../kits/page.vue'是我自己写的下拉刷新上啦加在的组件,运行的话删掉这些引用就可以了。

本次记录摘要是从刚刚完成的项目中抽离的部分代码(注:本项目实践代码,可运行,可运行,可运行,可运行)

Vue+Vux项目实践完整代码Vue+Vux项目实践完整代码Vue+Vux项目实践完整代码

Vue+Vux项目实践完整代码

总结

以上所述是小编给大家介绍的Vue+Vux项目实践完整代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于jQuery的公告无限循环滚动实现代码
May 11 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
Jul 17 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
Oct 14 Javascript
让IE8浏览器支持function.bind()方法
Oct 16 Javascript
Javascript模块化编程详解
Dec 01 Javascript
jQuery中:selected选择器用法实例
Jan 04 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 Javascript
jQuery插件扩展extend的简单实现原理
Jun 24 Javascript
vuejs事件中心管理组件间的通信详解
Aug 09 Javascript
vue 路由页面之间实现用手指进行滑动的方法
Feb 23 Javascript
jQuery实现适用于移动端的跑马灯抽奖特效示例
Jan 18 jQuery
Bootstrap Table 搜索框和查询功能
Nov 30 #Javascript
微信小程序实现简单input正则表达式验证功能示例
Nov 30 #Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
Nov 30 #Javascript
微信小程序实战篇之购物车的实现代码示例
Nov 30 #Javascript
微信小程序支付及退款流程详解
Nov 30 #Javascript
windows下更新npm和node的方法
Nov 30 #Javascript
实例教学如何写vue插件
Nov 30 #Javascript
You might like
linux下 C语言对 php 扩展
2008/12/14 PHP
PHP 面向对象 final类与final方法
2010/05/05 PHP
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
2011/04/18 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
php验证码生成器
2017/05/24 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
jquery中实现标签切换效果的代码
2011/03/01 Javascript
EasyUI中的tree用法介绍
2011/11/01 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
用JavaScript实现页面重定向功能的教程
2015/06/04 Javascript
直接拿来用的15个jQuery代码片段
2015/09/23 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
2016/04/13 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
Python实现Const详解
2015/01/27 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
详解Python字典小结
2018/10/20 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
物流专业大学生职业生涯规划书范文
2014/01/15 职场文书
国旗下的演讲稿
2014/05/08 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android
python的html标准库
2022/04/29 Python