一眨眼,快三個月沒有寫博客了。一直在爲本身沒有寫博客而懊惱,忙過這段時間,好好總結一下。javascript
新項目主要是本身一我的在寫,先搭建了一個初步的架構,用了我並不熟悉的angular,這個過程當中,慢慢也熟悉了angular,同時也優化了本身的項目架構。css
這兩個多月裏一直處在高強度的工做中,項目是一個面向用戶的創做中心,涉及到數據、語音、圖片、地圖等等。html
地圖上的交互很複雜,因爲項目須要還會同時用兩種地圖,一個谷歌一個高德,谷歌主要面向國外數據,高德面向國內數據,前端
兩個地圖能夠任意切換,可是內容都要保持一致,而且最好可以相互補充,地圖開發商的接口不同,不少邏輯的實現方法也會不同,java
邏輯雖然是通的,可是適應每個地圖的代碼卻略有不一樣。這是這個項目比較難的一個地方。git
使用angular後,先後端進行了分離,前端須要去調用後端接口,後端接口比較抽象,經常不能一次性拿到本身想要的數據,請求一個接口獲取到內容以後每每還須要根據當前數據,github
再次去請求另外一個接口,先後端分離以後對前端的要求其實就更高了,同步明明能夠很簡單就解決的問題,異步以後就須要花費更多的邏輯去處理。web
如今想一想這個項目開發過程當中會發生不少事情:數據庫
說說項目架構:gulp
angular + browserify + gulp + bower + less
angular 主要使用了擴展: angular-ui-router、angular-bootstrap
browserify管理打包js
bower管理三方庫
gulp自動化構建項目
項目根目錄以下:
build文件夾是構建工具最後生成的部署代碼,src是全部源代碼,temp只是一些臨時文件
源碼根目錄以下:
app.js註冊了根模塊:
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會編譯app.js,gulp輸出到 build->app.js
common:
存有全部img資源,
一些全局js放在js文件夾(例如:我放置了環境配置和配合rem的resize),
三方的css庫、webfont和本身抽象的css,最後會把全部的less引入到app.less中,編譯爲一個app.css到build
modules:
全部業務按模塊寫在modules裏:
modules.less
modules目錄下有一個modules.less,全部模塊裏的less會被引入到modules.less裏,common的app.less會引入此文件
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代碼按控制器、指令和服務劃分,控制器控制頁面和邏輯,公用的頁面或者獨立的插件抽離爲指令,服務寫後臺請求接口
每一個模塊下一樣有app.js,用來註冊模塊和引入當前模塊下全部的js,最後編譯成一個文件。
config控制路由
templates管理模塊html,最後被打包到build(less會被打包到common的app.css裏),以下:
test模塊的app.js生成到build->modules->test->js->test.js,生成出的js我命名爲模塊的名字test.js,這樣是爲了在入口html引入js資源的時候,不想結尾看到的全是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>
這樣看起來比較清晰
此架構的優點:
架構代碼已經開源到github,說這麼多也許看代碼更容易讓人明白: github地址 https://github.com/zimv/zmNgFrameWork
一些踩過的小坑和建議:
寫成 /test 的話就會找不到路由。仍是建議用 url : "/test?id" 這種寫法
建議能夠直接把當前scope傳給另外一個做用域,好比:
angular.module("zmng") .directive("test", test); function test() { return { restrict: "AE", replace : true, scope : { testScope: "=" }, link : function() { $scope.testScope = $scope; }
} }
這樣代碼要乾淨不少,擴展也不用再多寫參數
結語:
作項目成長的纔會更快,但不必定成長的更好
高壓下容易產生負能量須要去訴說去釋放,須要時刻告訴本身,本身的目標是什麼
在寫代碼時,架構作過幾回調整,沒有最合適的架構,只有不斷調整才能適應需求
ng1.5.5&md5-cache對架構稍微作了調整:
調整以後build目錄有所改變,以前重命名app.js爲文件名:test/test.js ,如今不重命名: test/app.js