首页 > 编程 > JavaScript > 正文

Vue+Vux项目实践完整代码

2019-11-19 14:48:56
字体:
来源:转载
供稿:网友

提供完整的路由,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 = domainNameVue.prototype.serverName = serverNameVue.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项目实践完整代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表