一眨眼,快三個(gè)月沒有寫博客了。一直在為自己沒有寫博客而懊惱,忙過這段時(shí)間,好好總結(jié)一下。
新項(xiàng)目主要是自己一個(gè)人在寫,先搭建了一個(gè)初步的架構(gòu),用了我并不熟悉的angular,這個(gè)過程中,慢慢也熟悉了angular,同時(shí)也優(yōu)化了自己的項(xiàng)目架構(gòu)。
這兩個(gè)多月里一直處在高強(qiáng)度的工作中,項(xiàng)目是一個(gè)面向用戶的創(chuàng)作中心,涉及到數(shù)據(jù)、語音、圖片、地圖等等。
地圖上的交互很復(fù)雜,由于項(xiàng)目需要還會(huì)同時(shí)用兩種地圖,一個(gè)谷歌一個(gè)高德,谷歌主要面向國(guó)外數(shù)據(jù),高德面向國(guó)內(nèi)數(shù)據(jù),
兩個(gè)地圖可以任意切換,但是內(nèi)容都要保持一致,并且最好能夠相互補(bǔ)充,地圖開發(fā)商的接口不一樣,很多邏輯的實(shí)現(xiàn)方法也會(huì)不一樣,
邏輯雖然是通的,但是適應(yīng)每一個(gè)地圖的代碼卻略有不同。這是這個(gè)項(xiàng)目比較難的一個(gè)地方。
使用angular后,前后端進(jìn)行了分離,前端需要去調(diào)用后端接口,后端接口比較抽象,常常不能一次性拿到自己想要的數(shù)據(jù),請(qǐng)求一個(gè)接口獲取到內(nèi)容之后往往還需要根據(jù)當(dāng)前數(shù)據(jù),
再次去請(qǐng)求另一個(gè)接口,前后端分離之后對(duì)前端的要求其實(shí)就更高了,同步明明可以很簡(jiǎn)單就解決的問題,異步之后就需要花費(fèi)更多的邏輯去處理。
現(xiàn)在想想這個(gè)項(xiàng)目開發(fā)過程中會(huì)發(fā)生很多事情:
說說項(xiàng)目架構(gòu):
angular + browserify + gulp + bower + less
angular 主要使用了擴(kuò)展: angular-ui-router、angular-bootstrap
browserify管理打包js
bower管理三方庫(kù)
gulp自動(dòng)化構(gòu)建項(xiàng)目
項(xiàng)目根目錄如下:
build文件夾是構(gòu)建工具最后生成的部署代碼,src是所有源代碼,temp只是一些臨時(shí)文件
源碼根目錄如下:
app.js注冊(cè)了根模塊:
angular.module("zmng", [ "ui.router", "ui.bootstrap", "ngAnimate", "zmng.main", "zmng.test"]);require("./config.js"); require('./common/js/resize.js');
引入src目錄下的config.js、http.js,最后browserify會(huì)編譯app.js,gulp輸出到 build->app.js
common:
存有所有img資源,
一些全局js放在js文件夾(例如:我放置了環(huán)境配置和配合rem的resize),
三方的css庫(kù)、webfont和自己抽象的css,最后會(huì)把所有的less引入到app.less中,編譯為一個(gè)app.css到build
modules:
所有業(yè)務(wù)按模塊寫在modules里:
modules.less
modules目錄下有一個(gè)modules.less,所有模塊里的less會(huì)被引入到modules.less里,common的app.less會(huì)引入此文件
modules.less
//layout@import "layout/less/header.less";@import "layout/less/footer.less";@import "layout/less/content.less";// main@import "main/less/index.less";// test@import "test/less/main.less";
js&html:
js代碼按控制器、指令和服務(wù)劃分,控制器控制頁面和邏輯,公用的頁面或者獨(dú)立的插件抽離為指令,服務(wù)寫后臺(tái)請(qǐng)求接口
每個(gè)模塊下同樣有app.js,用來注冊(cè)模塊和引入當(dāng)前模塊下所有的js,最后編譯成一個(gè)文件
config控制路由
templates管理模塊html,最后被打包到build(less會(huì)被打包到common的app.css里),如下:
test模塊的app.js生成到build->modules->test->js->test.js,生成出的js我命名為模塊的名字test.js,這樣是為了在入口html引入js資源的時(shí)候,不想結(jié)尾看到的全是app.js,最終如下:
<script type="text/javascript" src="build/app.js"></script> <script type="text/javascript" src="build/modules/layout/js/layout.js"></script> <script type="text/javascript" src="build/modules/main/js/main.js"></script> <script type="text/javascript" src="build/modules/test/js/test.js"></script>
這樣看起來比較清晰
架構(gòu)代碼已經(jīng)開源到github,說這么多也許看代碼更容易讓人明白: github地址 https://github.com/zimv/zmNgFrameWork
一些踩過的小坑和建議:
寫成 /test 的話就會(huì)找不到路由。還是建議用 url : "/test?id" 這種寫法
建議可以直接把當(dāng)前scope傳給另一個(gè)作用域,比如:
angular.module("zmng") .directive("test", test); function test() { return { restrict: "AE", replace : true, scope : { testScope: "=" }, link : function() { $scope.testScope = $scope; }
} }
這樣代碼要干凈很多,擴(kuò)展也不用再多寫參數(shù)
結(jié)語:
做項(xiàng)目成長(zhǎng)的才會(huì)更快,但不一定成長(zhǎng)的更好
高壓下容易產(chǎn)生負(fù)能量需要去訴說去釋放,需要時(shí)刻告訴自己,自己的目標(biāo)是什么
在寫代碼時(shí),架構(gòu)做過幾次調(diào)整,沒有最合適的架構(gòu),只有不斷調(diào)整才能適應(yīng)需求
聯(lián)系客服