最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

angular和BootStrap3實(shí)現(xiàn)購物車功能

 更新時(shí)間:2017年01月25日 08:35:19   作者:Sophie_U  
這篇文章主要為大家詳細(xì)介紹了angular和BootStrap3實(shí)現(xiàn)購物車功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、頁面搭建

1、html結(jié)構(gòu)

采用BootStrap3來快速創(chuàng)建一個(gè)購物車表單樣式。
主要功能:
A:列表數(shù)據(jù)所示
B:增加刪除端口
C:清空購物車
D:商品數(shù)量的增減
E:動(dòng)態(tài)計(jì)算商品價(jià)格以及總價(jià)

<!DOCTYPE html>
<html lang="en" ng-app="app">
<head>
 <meta charset="UTF-8">
 <title>購物車</title>
 <link rel="stylesheet" href="../vendor/bootstrap/css/bootstrap.css">
 <script src="../vendor/angular.js"></script>
 <script src="car-controller.js"></script>
</head>
<body>
 <div class="table-responsive container" ng-controller="CarCtrl">

  <table class="table " ng-show="data.length">
   <thead>
   <tr><th>產(chǎn)品編號</th><th>產(chǎn)品名字</th><th>購買數(shù)量</th><th>產(chǎn)品單價(jià)</th><th>產(chǎn)品總價(jià)</th><th>操作</th></tr>
   </thead>
   <tr ng-repeat="value in data">
    <td>{{value.id}}</td>
    <td>{{value.name}}</td>
    <td>
     <button class="btn btn-primary" ng-click="reduce(value.id)" >-</button>
     <input type="number" name="num" ng-model="value.quantity" id="num">
     <button class="btn btn-primary" ng-click="add(value.id)">+</button>
    </td>
    <td>{{value.price}}</td>
    <td>{{value.price*value.quantity}}</td>
    <td>
     <button class="btn btn-danger" ng-click="removeItem(value.id)">移除</button>
    </td>
   </tr>
   <tfoot>
   <tr>
    <td></td>
    <td>總購買數(shù)量 </td>
    <td>{{totalQuantity()}}</td>
    <td>總購買價(jià)</td>
    <td>{{totalPrice()}}</td>
    <td>
     <button class="btn btn-danger" ng-click="data=null">清空購物車</button>
    </td>
   </tr>
   </tfoot>
  </table>
  <p ng-show="!data.length">您的購物車為空</p>
 </div>
</body>
</html>

2、js邏輯部分

1 注冊應(yīng)用app
2 定義controller以即數(shù)據(jù)
3 在html中綁定應(yīng)用以及controller,實(shí)現(xiàn)數(shù)據(jù)渲染

 var app=angular.module("app",[]);
 var carController=function($scope){
  $scope.data=[
   {
    id:1,
    name:'HuaWei',
    quantity:'2',
    price:4300
   },
   {
    id:2,
    name:'iphone7',
    quantity:'3',
    price:6300
   },
   {
    id:3,
    name:'XiaoMi',
    quantity:'3',
    price:2800
   },
   {
    id:4,
    name:'Oppo',
    quantity:'3',
    price:2100
   },
   {
    id:5,
    name:'Vivo',
    quantity:'3',
    price:2100
   }
  ]
 }

注意:

1、在html中通過ng-app注冊應(yīng)用,ng-controller來綁定控制器作用域,ng-repeat遍歷商品數(shù)據(jù)data
2、在js中,angular提供了angular.forEach(obj,fn(item){})方法來遍歷angular的數(shù)據(jù),并可以在fn中對數(shù)據(jù)做進(jìn)一步處理。此處計(jì)算總價(jià)便通過此方法

二、業(yè)務(wù)邏輯

1、總價(jià)計(jì)算操作

/*
   * 計(jì)算總價(jià)
   * @method: angular.forEach()
   * @param: 1. $scope.obj:要遍歷的scope上的數(shù)據(jù)
   *   2. function(item){} 回調(diào),在函數(shù)內(nèi)部處理遍歷的數(shù)據(jù)
   * */
  $scope.totalPrice=function(){
   var total=0;
   angular.forEach($scope.data,function(item){
    total+=item.quantity*item.price;
   })
   return total
  }
   /*計(jì)算總數(shù)量*/
  $scope.totalQuantity=function(){
   var total=0;
   angular.forEach($scope.data,function(item){
    total+=item.quantity;
   })
   return total
  }

說明:

1)、使用angular提供的forEach方法遍歷當(dāng)前數(shù)據(jù),從而計(jì)算出所有數(shù)據(jù)的總價(jià)以及總數(shù)量

2、刪除條目

 /*移除某項(xiàng)
  * @param:傳入當(dāng)前項(xiàng)的id作為參數(shù),以確定移除哪一項(xiàng)
  * */
  $scope.removeItem=function(id){
   var index=findIndex();
   $scope.data.splice(index,1);
  }

說明:

1)、為代碼利用,所以抽取出來findIndex()方法用于確定當(dāng)前操作的項(xiàng),代碼如下:

/*查找當(dāng)前操作的元素的位置*/
  function findIndex(id){
   var index=-1;
   angular.forEach($scope.data,function(value,key,obj){
    if(value.id===id){
     index=key;
     return index;
    }
   })
   return index;
  }

3.清空操作

在頁面中,直接利用表達(dá)式,但data=null完成數(shù)據(jù)的清空操作

<tr>
 <td></td>
 <td>總購買數(shù)量 </td>
 <td>{{totalQuantity()}}</td>
 <td>總購買價(jià)</td>
 <td>{{totalPrice()}}</td>
 <td>
  <button class="btn btn-danger" ng-click="data=null">清空購物車</button>
 </td>
</tr>

4. 增加和刪除商品數(shù)量

/*增加商品數(shù)量*/
  $scope.add=function(id){
   var index=findIndex($scope,id),
    item=$scope.data[index];
   item.quantity++;
  }
  /*減少商品數(shù)量
  * @description:
  * 減少當(dāng)前項(xiàng)的數(shù)量,當(dāng)僅剩一件時(shí)彈出對話框確認(rèn)是否清空。是則調(diào)用removeItem方法清除當(dāng)前項(xiàng)
  * */
  $scope.reduce=function(id){
   var index=findIndex($scope,id),
    item=$scope.data[index];
   if(item.quantity>1){ //判斷當(dāng)前項(xiàng)是否還能再減
    item.quantity--;
   }else{
    var makesure=confirm('確定要清空當(dāng)前項(xiàng)嗎??');
    if(makesure){
     $scope.removeItem(id)
    }
   }
  }

總結(jié):
此demo主要利用了angular的數(shù)據(jù)雙向綁定特性,從而大大的簡化了操作。
關(guān)鍵點(diǎn):

1)、angular.forEach(obj,fn(value,key,obj)) 迭代器
2)、ng-click指令綁定點(diǎn)擊事件。使用ng-click會(huì)自動(dòng)觸發(fā)angular的臟檢查機(jī)制從而實(shí)時(shí)的更新視圖
3)、ng-repeat指令遍歷數(shù)據(jù),渲染頁面
4)、ng-show指令:通過其值來判斷是否顯示(原理是給元素加nghide類名)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 利用angular.copy取消變量的雙向綁定與解析

    利用angular.copy取消變量的雙向綁定與解析

    眾所周知AngularJS的雙向綁定在表單應(yīng)用中強(qiáng)大又方便,但是偶爾會(huì)遇到需要解除對象變量的雙向綁定。Angular提供的angular.copy的方法可以實(shí)現(xiàn)解除雙向綁定。所以這篇文章就來給大家詳細(xì)的介紹下angular.copy,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-11-11
  • 關(guān)于angularJs清除瀏覽器緩存的方法

    關(guān)于angularJs清除瀏覽器緩存的方法

    這篇文章主要介紹了關(guān)于angularJs清除瀏覽器緩存的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Angular使用Restful的增刪改

    Angular使用Restful的增刪改

    今天小編就為大家分享一篇關(guān)于Angular使用Restful的增刪改,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • angular.JS實(shí)現(xiàn)網(wǎng)頁禁用調(diào)試、復(fù)制和剪切

    angular.JS實(shí)現(xiàn)網(wǎng)頁禁用調(diào)試、復(fù)制和剪切

    這篇文章主要給大家介紹了angular.JS實(shí)現(xiàn)網(wǎng)頁禁用調(diào)試、復(fù)制和剪切的相關(guān)資料,文中介紹的非常詳細(xì),相信對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • Angular 2父子組件數(shù)據(jù)傳遞之@Input和@Output詳解 (上)

    Angular 2父子組件數(shù)據(jù)傳遞之@Input和@Output詳解 (上)

    這篇文章主要給大家介紹了關(guān)于Angular 2父子組件數(shù)據(jù)傳遞之@Input和@Output的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來看看吧。
    2017-07-07
  • Angular5整合富文本編輯器TinyMCE的方法(漢化+上傳)

    Angular5整合富文本編輯器TinyMCE的方法(漢化+上傳)

    TinyMCE是一個(gè)輕量級的富文本編輯器,相對于CK編輯器更加精簡,但必須滿足絕大部分場景的需要。這篇文章主要介紹了Angular5整合富文本編輯器TinyMCE(漢化+上傳)的相關(guān)知識,需要的朋友可以參考下
    2020-05-05
  • 詳解Angular組件之生命周期(二)

    詳解Angular組件之生命周期(二)

    Angular本身監(jiān)督所有Angular組件和指令的生命周期 。為了在開發(fā)應(yīng)用程序時(shí)順利進(jìn)行,您必須了解結(jié)果的生命周期。組件是任何Angular應(yīng)用程序的主要構(gòu)建塊。因此,必須了解它們才能理解組件生命周期的處理步驟。只有這樣才能在應(yīng)用程序的開發(fā)中實(shí)現(xiàn)。
    2021-05-05
  • 基于AngularJs + Bootstrap + AngularStrap相結(jié)合實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)代碼

    基于AngularJs + Bootstrap + AngularStrap相結(jié)合實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)代碼

    這篇文章主要給大家介紹基于AngularJs + Bootstrap + AngularStrap相結(jié)合實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)的實(shí)例代碼,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-05-05
  • Angular實(shí)現(xiàn)點(diǎn)擊按鈕后在上方顯示輸入內(nèi)容的方法

    Angular實(shí)現(xiàn)點(diǎn)擊按鈕后在上方顯示輸入內(nèi)容的方法

    這篇文章主要介紹了Angular實(shí)現(xiàn)點(diǎn)擊按鈕后在上方顯示輸入內(nèi)容的方法,涉及AngularJS事件響應(yīng)及頁面元素屬性動(dòng)態(tài)設(shè)置相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • AngularJS中的按需加載ocLazyLoad示例

    AngularJS中的按需加載ocLazyLoad示例

    本篇文章主要介紹了AngularJS中的按需加載ocLazyLoad,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01

最新評論

湖北省| 兴和县| 高密市| 通海县| 西藏| 临夏市| 锦屏县| 曲周县| 铜川市| 克东县| 图木舒克市| 洛阳市| 绥宁县| 逊克县| 玉树县| 富源县| 罗源县| 突泉县| 临夏县| 秀山| 来凤县| 拉孜县| 钟祥市| 大港区| 建阳市| 普宁市| 林州市| 略阳县| 阳西县| 志丹县| 吴堡县| 汉寿县| 平度市| 辉南县| 石渠县| 陆丰市| 广安市| 虞城县| 濮阳县| 新河县| 京山县|