Vue+Vux專案實踐
利用腳手架搭建專案架構,此步驟不予此地說明,不明之處可上git、百度或者留言。
本專案實踐程式碼,均可執行。
程式碼尚未優化,大牛請繞路。
提供完整的路由,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專案實踐
利用腳手架搭建專案架構,此步驟不予此地說明,不明之處可上git、百度或者留言。 本專案實踐程式碼,均可執行。 程式碼尚未優化,大牛請繞路。 提供完整的路由,services````````````` -------------------------------
Vue + webpack 專案實踐
Vue.js 是一款極簡的 mvvm 框架,如果讓我用一個詞來形容它,就是 “輕·巧” 。如果用一句話來描述它,它能夠集眾多優秀逐流的前端框架之大成,但同時保持簡單易用。廢話不多說,來看幾個例子: <script src="vue.js"></script&g
webpack+vue+bootstrap專案實踐
這幾天進行了一個後臺管理系統的專案開發,協助工具使用了svn(也用了git來安裝bower),在基於node平臺搭建的webpack的開發環境下,根據後臺提供的API,利用bootstrap
vue專案實踐教程2:使用vux設計登入註冊,並講解vue路由,切換頁面標題等內容
上一章筆者介紹vux專案的搭建和簡介,這裡筆者設計幾個登入註冊頁面,來講解vux中的相關元件的使用,和vue的相關基礎知識。 1.我們在與components資料夾同級的目錄下建立一個views資料夾,資料夾中再建立一個user資料夾,用於存放和使用者相關的頁
vue專案實踐教程1:vux專案搭建和簡介
vue作為比較受歡迎的前端開發框架之一,因為其優雅的程式碼結構,輕量化程式碼設計,簡介易懂的API,靈活易用的指令和屬性廣受前端開發者的喜愛,其學習成本和學習難度相對react來說要簡單很多。 這裡,筆者以一個小專案為例,向大家介紹vue的使用和開發。 在瞭
vue專案實踐004~~~一籃子的實踐技巧
前言 繼續總結vue專案實踐中的優化和思考,實踐系列004,請持續關注不要掉隊哦 實踐問題 批量物件屬性賦值 使用場景:主要是針對需要把物件的一些屬性批量的賦值到另外一個物件上,然後如果你的屬性很多可能要寫很多賦值語句。(前提是屬性名一般是相同的) 說明:可能有人會問為什麼不直接用這個物件,答
Vue框架—專案部署與實踐
環境配置 首先安裝 node.js 去官網安裝 LTS 下的指定版本。 檢視是否安裝Node.js 安裝成功,開啟cmd黑視窗, 輸入node -v 輸出了版本號說明成功了。 輸入npm -v 檢視是否有版本號。 使用碼雲:來儲
Vue +vux 搭建移動端專案
一、使用 vue-cli 搭建Vux專案模板 1、全域性安裝 vue-cli npm install --global vue-cli 2、建立一個基於 webpack 模板的新專案 vue init
深入解析Vue.js專案API、Router配置拆分實踐
前後端分離開發方式前端擁有更高的控制權 隨著前端框架技術的飛速發展,Router這個概念也被迅速普及到前端專案中,在早期前後的沒有分離的時期下,並沒有明確的路由概念,前端頁面跳轉大多是通過後端進行請求轉發的,比如在Spring MVC專案中,進行一個頁面跳轉如下(畫紅線部分):
jQuery轉Vue專案實踐總結
工作需要,將公司專案從jQuery轉成Vue來寫。這裡分享下轉變專案的過程並寫了一個小demo,希望能對遇到同樣問題的朋友一些幫助。 PS: 本人Android開發,兼職前端,前端知識淺薄,有什麼不對的地方還請指出,大家共同進步。謝謝~ jQue
vue分頁元件專案實踐
最近開發後臺專案需要寫一個vue的分頁元件,所以把寫好的元件分享到這個上面加深一下印象: 看了下寫的還是比較多的最開始是父子元件之間的通訊。 父元件container裡面的內容 <template> //
vue+vux+axios+vuex+vue-router的專案的理解
本文主要是講解專案前期的工作,後期考慮再詳細說明。 作為一個技術團隊如果你們團隊選擇了上面的技術棧,這說明你們的技術團體對於vue有很熟練的掌握了。在這裡我想說明的是前期架構的重要。這裡有一遍部落格寫的很不錯,點選這裡,主要是講解如何高效的開發一個專案。 如果你選擇了以上的vue技術棧,那麼你在前
VUE+TS+WEBPACK框架的專案實踐
一、作者簡介 WONDER專注於框架的研究,致力於提升效能,解放生產力。包括但不限於設計流程化,重構流程化,前端流程化,基於資料流、狀態流的自動化測試。致力於基於javascript語言的全平臺解決方案的研究(包括前端(vue為核心),後端(thinkjs為核
vue專案實踐(vuex + vue-router + vue-resource)
https://segmentfault.com/a/1190000006747096?utm_source=tuicool&utm_medium=referral 初次接觸vue,刷完了堪稱經典的vue官網文件+vue-router文件+vuex文件+vue-c
Vue 小專案的最佳實踐
本專案實現的功能有:根據分享出來的文章ID獲取資料。 在網頁內可以開啟或者下載該APP。 微信平臺的特殊處理。 微信平臺的遮蔽了scheme,文章頁面的開啟APP的功能需要出浮窗提示去瀏覽器中開啟。 下載APP頁面在微信中,IOS可以喚起APP Store,安卓
Vue.js 開發實踐:實現精巧的無限加載與分頁功能
cti head 設定 命令 webpack transform style time default https://segmentfault.com/a/1190000005351971#articleHeader9 本篇文章是一篇Vue.js的教程,目標在於用一
laravel5.4+vue+vux+element的環境搭配
sass save outer 文件 保存 4.0 end pan 部分 最近因為項目的需要,需要搭配一個這樣的環境。之前做過的東西沒有這樣用過,在網上找了半天不是過於簡單就是根本行不通,自己踩了半天的坑,終於搭配成功。 首先下載laravel5.4,直接去官網一鍵安裝包或
vue+vux+webpack快速構建
lock init node nbsp install class pan project color 在這之前,你需要確定已經具備環境:node.js;vue.js;vue.cli;webpack; 一、構建vux # install vue-cli npm
vue+vux 仿飛豬app火車票部分(五)---城市列表保存到MongoDB數據庫並且啟用node.js服務
export ror sco stat mongodb require pre nec 問題 把車站列表保存到數據庫,並且從本地創建服務 node.js創建httpserver 1.搭建基於express的運行環境 全局安裝express-gengerator
vue項目實踐-添加axios封裝api請求
.proto promise ret .data post ios 接口 debug 請求 安裝 axios npm install axios --save 創建實例 (utils/fetch.js) axios 默認提交格式為:application/json 可使用