您好,欢迎访问一九零五行业门户网

Vue+Vux项目(详细教程)

本文给大家分享一段详细的代码给大家介绍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> <p id="app-box"></p> <!-- 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> <p id="app"> <loading v-model="isloading"></loading> <transition> <router-view></router-view> </transition> </p></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> <p style="height:100%;"> <top style="margin-bottom:46px"></top> <transition> <router-view></router-view> </transition> <bottom></bottom> </p></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> <p> <page @loadmore="loadmore" @refresh="refresh"> <p> <p v-for="i in n">placeholder {{i}}</p> </p> </page> </p></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'是我自己写的下拉刷新上啦加在的组件,运行的话删掉这些引用就可以了。
本次记录摘要是从刚刚完成的项目中抽离的部分代码(注:本项目实践代码,可运行,可运行,可运行,可运行)
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
在微信小程序中有关功能函数总结(详细教程)
在javascript中如何使用手机号码校验工具类phoneutils
在微信小程序中如何实现下载进度条
在微信小程序中如何使用video组件播放视频
以上就是vue+vux项目(详细教程)的详细内容。
其它类似信息

推荐信息