基於angular+bower+glup的webapp

來源:互聯網
上載者:User

標籤:color   lte   過濾   定製   即時   說明   head   項目   tle   

一:bower介紹

1:全域安裝安裝bower

cnpm i -g bower

bower常用指令:

bower init    //初始設定檔案bower installbower uninstall

2:bower初始化配置:

bower init

後續的填寫全部選yes

3:安裝依賴(angularjs)

bower install -- save angular

4:建立.bowerrc

null>.bowerrc

這時候會提示null不是內部指令,但是沒問題,已經建立好了。

然後在檔案中輸入:

{"directory": "lib"}

這段代碼的意思是,接下來我們bower install後的依賴都會放在lib這個檔案夾下

5:安裝requirejs 

bower install --save requirejs

這時候我們發現angular和require都放到了lib這個檔案夾下了

6:刪除目錄,卸載requirejs

剛才4、5步在項目中沒啥用處,我們使用bower uninstall卸載requirejs,然後刪除lib目錄和bowerrc檔案

bower uninstall --save requirejs

 

二:自動化構建工具gulp項目結構介紹 gulp建立目錄

1:全域安裝gulp

cnpm i -g gulp

2:定義node的安裝模組檔案package.json

npm init

 後面需要填寫的部分全部斷行符號跳過

3:安裝模組

模組安裝的文法:cnpm i --save-dev xxxx

cnpm i --save-dev gulp

  接下來我們大量安裝其他的模組,多個模組之間用空格隔開:文法為cnpm i --save-dev xxxx xxxx xxxx xxxx

cnpm i --save-dev gulp-clean gulp-concat gulp-connect gulp-cssmin gulp-imagemin gulp-less gulp-load-plugins gulp-plumber gulp-uglify open

4:建立設定檔gulpfile.js

拷貝依賴檔案的方法:

var gulp = require(‘gulp‘); //引用gulp模組var $ = require(‘gulp-load-plugins‘)(); //其他以gulp-開頭的模組都不需要再定義變數了,可以直接用$引用var open = require(‘open‘); //這個不是以gulp開頭,需要引用var app = {  //聲明目錄路徑的全域變數  srcPath: ‘src/‘,  devPath: ‘build/‘,  prdPath: ‘dist/‘};gulp.task(‘lib‘, function() {               //拷貝js的方法  gulp.src(‘bower_components/**/*.js‘)      //讀取bower_components路徑下所有的js檔案  .pipe(gulp.dest(app.devPath + ‘vendor‘))  //dest()是寫檔案api  .pipe(gulp.dest(app.prdPath + ‘vendor‘))});

接下來我們執行gulp lib。執行成功後會我們會將所有的依賴檔案都拷貝到build和dist檔案夾下

注意:如果這裡報錯:cannot find module xxx說明之前安裝依賴時有的依賴沒有安裝上,那缺什麼依賴我們就cnpm i xxx啥依賴

 

接下來寫拷貝html的方法:

gulp.task(‘html‘, function() {  gulp.src(app.srcPath + ‘**/*.html‘) //讀取app.srcPath路徑下所有的html檔案  .pipe(gulp.dest(app.devPath))  .pipe(gulp.dest(app.prdPath))})

我們建立一個src檔案夾,然後在src檔案夾下建立index.html。view檔案夾和view下的view.html

接著我們執行gulp html。執行成功後會我們會將index.html和view檔案夾都拷貝到build和dist檔案夾下

 

然後我們寫拷貝json的方法,因為項目的資料沒有和後台互動,所以我們要定義假的資料。

gulp.task(‘json‘, function() {  gulp.src(app.srcPath + ‘data/**/*.json‘) //讀取app.srcPath路徑下所有的json檔案  .pipe(gulp.dest(app.devPath + ‘data‘))  .pipe(gulp.dest(app.prdPath + ‘data‘))});

在src檔案夾下建立data檔案夾,然後在data檔案夾下建立1.json。 

接著我們執行gulp json。執行成功後會我們會將data檔案夾和1.json都拷貝到build和dist檔案夾下

 

接下來是拷貝less的方法:

gulp.task(‘less‘, function() {  gulp.src(app.srcPath + ‘style/index.less‘) //讀取app.srcPath路徑下所有的less檔案  .pipe($.less())  .pipe(gulp.dest(app.devPath + ‘css‘))  .pipe($.cssmin()) //生產環境壓縮  .pipe(gulp.dest(app.prdPath + ‘css‘))});

我們在src下建立style檔案夾,然後在裡面建立index.less

接著我們執行gulp less。執行成功後會我們會將css檔案夾和index.css拷貝到build和dist檔案夾下(這裡的index.css是編譯過後的index.less)

 

接下來是拷貝js的方法:

gulp.task(‘js‘, function() { //讀取app.srcPath路徑下所有的js檔案  gulp.src(app.srcPath + ‘script/**/*.js‘)  .pipe($.concat(‘index.js‘)) //合并js檔案  .pipe(gulp.dest(app.devPath + ‘js‘))  .pipe($.uglify())  //生產環境壓縮  .pipe(gulp.dest(app.prdPath + ‘js‘))});

我們在src下建立script檔案夾,然後在裡面建立1.js和2.js,測試是否合并了js檔案

接著我們執行gulp js。執行成功後會我們會將js檔案夾和index.js拷貝到build和dist檔案夾下(這裡的index.js是合并過後的)

 

接下來是拷貝image的方法:

gulp.task(‘image‘, function() { //讀取app.srcPath/image路徑下所有的檔案(jpg,png等)  gulp.src(app.srcPath + ‘image/**/*‘)  .pipe(gulp.dest(app.devPath + ‘image‘))  .pipe($.imagemin()) //生產環境再壓縮  .pipe(gulp.dest(app.prdPath + ‘image‘))});

我們在src下建立image檔案夾,然後在裡面放入一個png格式的圖片

接著我們執行gulp image。在這裡可能會拋出一個unhanded error event。這個錯誤好像是這個圖片壓縮外掛程式對win7不友好。

 

如果我們需要刪除某個檔案夾:

gulp.task(‘clean‘, function() {  //清除build和dist檔案  gulp.src([app.devPath, app.prdPath])  .pipe($.clean());});

接著我們執行gulp clean。執行完成後build和dist檔案夾都被刪除了。

 

合并上述方法:

gulp.task(‘build‘, [‘image‘, ‘js‘, ‘less‘, ‘lib‘, ‘html‘, ‘json‘]); //合并方法

執行gulp build後,會將執行合并的幾個方法。

 

接下來是開啟服務的方法:

gulp.task(‘serve‘, [‘build‘], function() {  //開啟服務  $.connect.server({    root: [app.devPath],  //根目錄    livereload: true,     // 熱更新    port: 3000  });  open(‘http://localhost:3000‘);  gulp.watch(‘bower_components/**/*‘, [‘lib‘]);  //監控檔案的變化,並Just-In-Time 編譯  gulp.watch(app.srcPath + ‘**/*.html‘, [‘html‘]);  gulp.watch(app.srcPath + ‘data/**/*.json‘, [‘json‘]);  gulp.watch(app.srcPath + ‘style/**/*.less‘, [‘less‘]);  gulp.watch(app.srcPath + ‘script/**/*.js‘, [‘js‘]);  gulp.watch(app.srcPath + ‘image/**/*‘, [‘image‘]);});

執行gulp serve後,瀏覽器會開啟http://localhost:3000。因為在win7上image這個方法會報錯,所以我們得將build中的image和gulp.watch的image都去掉。編譯成功後,我們直接修改index.html中的內容,儲存一下發現頁面已經重新整理內容了(熱更新)。gulp.watch這個方法使用的前提是需要給其監控的方法中加上一句代碼

.pipe($.connect.reload());

:如html這個方法修改為:

gulp.task(‘html‘, function() {  gulp.src(app.srcPath + ‘**/*.html‘) //讀取app.srcPath路徑下所有的html檔案  .pipe(gulp.dest(app.devPath))  .pipe(gulp.dest(app.prdPath))  .pipe($.connect.reload());})

 

然後是預設的方法

gulp.task(‘default‘, [‘serve‘]); //預設的方法

當我們執行gulp指令時,會執行預設的gulp serve。

 

 

三:頁面的開發

模組劃分: 本次應用劃分為: 職位 搜尋 使用者

 

一:頁面架構  :頁面中的相對路徑都是dist和build下的。

1:在index.html中引入angular.min.js和index.js

<script src="vendor/angular/angular.min.js" charset="utf-8"></script><script src="js/index.js" charset="utf-8"></script>

注意:這裡的index.js是所有的js合并的js檔案。

2:在script下建立app.js

‘use strict‘;angular.module(‘app‘, [‘ui.router‘]); //全域對象angular,module方法可以建立模組,[]裡面是模組的依賴。模組需要啟動,第一種是angular.boostrap()

  

 

二:路由配置與安裝 :

1:安裝與引用

bower install --save angular-ui-router

  之後我們在頁面中引入: 這裡的vendor其實是打包後dist和build下的檔案目錄。

<script src="vendor/angular-ui-router/release/angular-ui-router.min.js" charset="utf-8"></script>

然後在app.js中引入此模組

angular.module(‘app‘, [‘ui.router‘]);

2:在script>config>router.js

‘use strict‘angular.module(‘app‘).config([‘$stateProvider‘, ‘$urlRouterProvider‘, function($stateProvider, $urlRouterProvider) {  $stateProvider.state(‘main‘, {    url: ‘/main‘,    templateUrl: ‘view/main.html‘,    controller: ‘mainCtrl‘  })  $urlRouterProvider.otherwise(‘main‘);}])

3:建立src>view>main.html

<div class="">  angular</div>

 4:建立script>controller>mainCtrl.js

‘use strict‘;angular.module(‘app‘).controller(‘mainCtrl‘, [‘$scope‘, function($scope){}]);

 

三:職位頁面的開發

1:在main.html添加

<div app-head></div><div app-position-list></div><div app-foot></div>

2:添加head模板template>head.html

<div class="head">  <span>10秒定製職位</span>  <button>去登陸</button></div>

3:添加指令directive>head.js

‘use strict‘;angular.module(‘app‘).directive(‘appHead‘, [function(cache){  return {    restrict: ‘A‘, //A是以屬性方式調用指令    replace: true, //為true時,模板必須要有根項目    templateUrl: ‘view/template/head.html‘  };}]);

4:添加樣式檔案style>template>head.less

@import ‘../variable.less‘;.head {  background-color: @headBgColor;  .h(40);  .lh(40);  padding: 0 7px;  .text {    color: @defaultColor;  }  .custom {    background-color: @warnColor;    border-color: @warnColor;    color: @defaultColor;    border-style: dashed;    .mt(7);    .pl(15);    .pr(15);  }  .back-btn {    font-size: 20px;    width: 1rem;    left: 0;  }}

樣式檔案需要在index.less中引用進來,我們也可以在index.less中將一些css方法寫進去

@import ‘template/head.less‘;

建立variable.less將佈景主題色彩定義

@defaultColor: #fff;@headBgColor: #12d5b5;.............

建立property.less將一些具有固定值的css定義

.ta-l {  text-align: left;}.ta-c {  text-align: center;}.ta-r {  text-align: right;}
。。。。。。

  

之後我們要在index.html中將css引入進來

  <link rel="stylesheet" href="/css/index.css" media="screen" title="no title" charset="utf-8">

 

四:搜尋網頁面的開發

 

1:建立全域變數

 在script>config>dict.js

‘use strict‘;angular.module(‘app‘).value(‘dict‘, {}).run([‘dict‘, ‘$http‘, function(dict, $http){  $http.get(‘data/city.json‘).success(function(resp){    dict.city = resp;  });  $http.get(‘data/salary.json‘).success(function(resp){    dict.salary = resp;  });  $http.get(‘data/scale.json‘).success(function(resp){    dict.scale = resp;  });}]);

 如何使用全域變數:依賴注入並聲明:

angular.module(‘app‘).controller(‘searchCtrl‘, [‘dict‘, ‘$http‘, ‘$scope‘, function(dict, $http, $scope){

  

2:建立過濾器

建立script>filter>filterByObj.js

 

‘use strict‘;angular.module(‘app‘).filter(‘filterByObj‘, [function(){  return function(list, obj) {    var result = [];    angular.forEach(list, function(item){      var isEqual = true;      for(var e in obj){        if(item[e]!==obj[e]) {          isEqual = false;        }      }      if(isEqual) {        result.push(item);      }    });    return result;  };}]);

使用:

找到需要使用的頁面:

ng-repeat="item in data|filterByObj:filterObj"

這裡的data是filterByObj的list參數(被過濾的對象),fliterObj是參數obj(過濾條件)。

 

 

 

 

 五:頁面動畫切換angular.animate.js

1:安裝:

bower install --save angular-animate

2:使用:app.js中注入

angular.module(‘app‘, [‘ui.router‘, ‘ngCookies‘, ‘validation‘, ‘ngAnimate‘]);

  

 

 

 

 

專案檔夾:
bower_components:第三方依賴src:源碼build: 編譯後的開發環境代碼dist:壓縮後生產環境代碼test:單元測試和整合測試代碼node_modules:node安裝依賴包

  

基於angular+bower+glup的webapp

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.