Vue+Vux项目实践完整代码

提供完整的路由,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项目实践完整代码

图片[4]-Vue+Vux项目实践完整代码-偶像资源网

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

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容