热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

仿"米丫天色App"Vue項目總結

媒介先說說寫這個項目的效果。之前事情的時刻,雖然做過不少項目,然則由於簽了保密協定,沒法把代碼放出來。厥後跳槽的時刻,拿不出一個完全的個人項目,只能把日常平凡寫的一些小demo拿出

《仿

媒介

先說說寫這個項目的效果。之前事情的時刻,雖然做過不少項目,然則由於簽了保密協定,沒法把代碼放出來。厥後跳槽的時刻,拿不出一個完全的個人項目,只能把日常平凡寫的一些小demo拿出來遛遛。所以盤算寫一個本身的項目。

這個項目仿的是“米丫天色”APP。也不知道會不會侵權,橫豎先放上來再說。功用部份實在很簡樸,只是平常的數據獵取,另有用戶治理這一塊的功用。主假如經由歷程這個項目來演習一個完全的項目所須要考慮到的處所。比方:項目文件架構,邏輯組件和大眾組件應當如何部署;vuex部份該如何分別和組合;router部份該如何設置;前台和背景應當假如關聯。

現在項目另有不少bug,先發了,背面再逐步優化。

這篇文章將把我做這個項目的歷程和一些主意形貌出來,給本身總結一下。固然,假如能夠協助到也在寫vue的朋儕就更好了。

手藝棧

  • vue
  • vue-router
  • vuex
  • axios
  • stylus
  • easy-mock

項目鏈接:weather-webapp

項目構造

按字母遞次

  1. api:要求數據時運用到的要領
  2. assets:靜態資本。重要包含一些圖標和全局款式之類的文件
  3. components:大眾組件
  4. router:路由設置
  5. store:集合數據治理(vuex)
  6. tools:東西函數
  7. view:邏輯頁面組件
  8. App.vue:根組件
  9. main.js:進口文件

這裏輕微提一下css的解決方案。

之前一向都在運用sass,只是node-sass很難裝置勝利,所以就改用stylus。二者的差異我覺得不是很大。別的是
.vue文件中的
style部份,縱然增加
scoped屬性,照樣會有能夠發生衝突。比方父子組件的款式中都具有同一個類名,這時候就會發生衝突。現在正在盤算預備運用
css-modules

從路由最先吧

關於路由,列位寫過vue的朋儕應當都不陌生了。這裏重要講一下路由的構造,我把它理解為“分層”,也就是router-view組件的位置。之前在看一個ui框架的時刻(忘了是啥框架了),留意到它的頁面分層的觀點。大概是如許的:
1.遮罩層(loading之類的) 2.交互層(模態框什麼的) 3.音訊提醒層(本項目中的toast組件) 4.主內容界面 5.嵌套的子路由
現在就只想到這些了。

別的是router.js文件的寫法。在本項目中,我把一切的路由寫在同一個文件,是由於路由比較少,假如在路由構造多而龐雜的項目,這類寫法會很頭疼。發起的寫法是將各個邏輯模塊的路由離開,末了在主路由里引入。大概是如許的:

// router/module-a.js
const View1 = () => import('@/view/view-1')
const View2 = () => import('@/view/view-2')
export default [
{ path: '/home/module-a/view-1', name: 'view-1', component: View1 },
{ path: '/home/module-a/view-2', name: 'view-2', component: View2 }
]

// router/index.js
import Vue from 'vue'
import Router from 'vue-router'
import ModuleA from './module-a'
Vue.use(Router)
const router = new Router({
routes: [
...ModuleA
]
})
export default router

噢,對了。之前還在sf找到一個小技能:如安在切換路由時,修正瀏覽器標籤的題目。

router.beforeEach((to, from, next) => {
window.document.title = to.meta.title || '米丫天色'
next()
})

注重:我試過把title寫在路由屬性中而不是meta里,發現是不可行(多寫一層也沒啥大題目)。

來說說store

在項目的store內里,只要modules,沒有根層的state,這個主假如受redux的一些影響吧。把一切須要緩存的數據放在一個store樹內里,每一個模塊零丁掌握。別的在store/index.js內里會看到setState這個要領。這個也是受react的影響(this.setState 要領),也是一個小技能吧。vuex內里提到mutations只處置懲罰同步的操縱,actions處置懲罰異步操縱。那末基本上每一個action都邑commit一個或許多個mutation。而mutation是應當只修正一個state照樣多個?這個題目依據差別的營業邏輯會有差別的效果。所以定義了setState這個通用的要領。至於action的寫法,本項目里的寫法我覺得照樣有點題目的。下面是近來找到的關於async函數的寫法:

async function getSomething() {
try{
const result = await apiGetSomething()
if(result.status === 'ok') {
// some code
}
} catch(err) { console.error(err) }
}

關於這類寫法現在還在思考中,後續會舉行修正。

api文件

上述提到的action里運用到要求數據的api要領。api要領都邑返回一個promise對象,同時也是一個異步函數。
說到api就要提一下easy-mock。這個網站是基於mock.js,能夠很輕易天生自定義接口,就算你不會背景,也能夠很快速簡樸的編輯本身想要的接口。運用要領嘛,照樣直接看官方教程吧。
由於本項目要運用的數據比較簡樸,所以接口部份沒有什麼好說的了。

資本文件

assets部份的圖標會被看成依靠,援用的時刻運用import引入,然後還不能直接運用,必需放到設置項內里,平常是放在data
然後是style,這裏主假如設置全局款式變量,比方主題色之類的。
具體要領:
build/utils.js的generateLoaders中修正.
增加全局變量的文件設置

const stylusOptiOns= {
import: [path.join(__dirname, '../src/assets/style/theme.styl')],
paths: [path.join(__dirname, '../src/assets/style/'), path.join(__dirname, '../')]
}

个中的theme.styl定義全局變量的文件

修正stylus的設置

stylus: generateLoaders('stylus', stylusOptions),
styl: generateLoaders('stylus', stylusOptions)

大眾組件

基本上我把能夠零丁提出來的內容都寫成大眾組件。別的零丁寫了一個index.js文件。內里將一切的大眾組件引入然後打包導出,如許在運用的時刻就能夠少寫許多代碼,這個技能是之前看vux-ui內里的組件定義學到的。

// components/index.js
const TabBar = () => import('./TabBar')
const AddressBar = () => import('./AddressBar')
const TmpPanel = () => import('./TmpPanel')
// ...
export { TabBar, AddressBar, TmpPanel //... }

// 邏輯頁面引入
import { TabBar, AddressBar, TmpPanel } from '@/components'

待續。。。


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
author-avatar
阳光-假日
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有