將BootstrapJS和AngularJS結合使用以及為什么不用jQuery

jopen 9年前發布 | 69K 次閱讀 BootstrapJS

Bootstrap  和 Angular  都是人們大量使用的工具。在很多項目中,它們需要一起使用。為什么不呢?他們已經改變了CSS和JS的開發方式,讓前端既成為令人難以置信的工具。


但是,把它們放在一起使用還有一些問題,特別是當你試圖在Angular的項目中引入Bootstrap JavaScript組件時,會是一個問題。當建立了Angular的項目,##你不應該添加完整的jQuery庫##。 jQlite已經包含在Angular中的,所有jQuery必要的功能它都有。這是因為把jQuery添加到Angular的項目將很難讓你完全掌握Angular的核心優勢和數據綁定的力量。


比如你想在某種程度上改變View視圖,一個很好的做法是通過Angular所綁定的data數據來改變。我們寫這篇文章的目標就是為了,學習用jQuery和Angular通過不同的手段達到相同的目的。



Bootstrap JavaScript和Angular問題


這個問題可以追溯到,你不應該在你的Angular項目中使用jQuery的原則。jQuery操作視圖的方法與Angular操縱數據的方法會起沖突。


為什么你不應該使用jQuery


您使用jQuery操作數據抓住并注入到DOM的方式基本上基于事件。當我們使用Bootstrap JavaScript組件時,比如一個按鈕,我們需要“單擊此按鈕時,設置此按鈕為激活狀態”。并將這種設置添加入新加的按鈕中。通過添加 .active 類和檢查input(如果你的按鈕是一個input)為實現。


在Angular中,操縱數據不是通過抓取和注入。一般通過數據綁定來實現,野蠻抓取注入數據。也能夠改變每個組件的狀態,不過在切換時就會暴露出問題。


這就是為什么我們不能直接用Bootstrap的JavaScript。它依賴于jQuery我們不希望jQuery的破壞我們的Angular項目。如果我們試圖綁定變量到組件,它無法工作。



解決方案: UI Bootstrap


那么該如何解決?我們從Angular得知,我們需要將數據綁定到一個特定的組件,我們應該建立一個directive 指令。這將讓我們的Angular網站,更關注數據的變化。


該解決方案是一種被稱為UI Bootstrap 的項目。這是由Angular UI團隊開發的,增加了許多Angular的擴展組件。UI Bootstrap不使用jQuery; 它為每個Bootstrap JS組件添加了內置指令(directives)。


對于UI Bootstrap(非BootstrapJS)的要求是:


  • 沒有jQuery的依賴
  • 依賴Angular
  • 依賴Bootstrap CSS文件
  • </ul>


    就是這樣。現在,我們要如何將它集成到我們的項目?



    我們的Angular應用


    讓我們來看看我們需要些什么設置。如果你已經看過JavaScript代碼,你會看到我們創建了一個Angular模塊和控制器。然后,我們創建的按鈕和折疊的變量。


    為此,下一步就是要拿到UI Bootstrap的文件,放到我們的項目中。那么我們能夠在我們的Angular模塊中導入ui.bootstrap。就這樣,我們就能夠獲取需要模仿BootstrapJS組件的指令(directives )!



    // 創建 angular app 導入 ui.bootstrap

    angular.module('app', ['ui.bootstrap'])

    .controller('mainController', function($scope) {

      

      // BUTTONS ======================

      // 設置數據

      $scope.bigData = {};

      

      $scope.bigData.breakfast = false;

      $scope.bigData.lunch = false;

      $scope.bigData.dinner = false;

      

      // COLLAPSE =====================

      $scope.isCollapsed = false;

      

    });
    </pre>


    現在,正確的使用方式是,當按下按鈕時調整這些變量的值。


    使用UI Bootstrap按鈕指令(Directive)


    通過UI Bootstrap文檔 ,使用復選框按鈕正確的方法是添加 ng-model 的定義對象,并添加 btn-checkbox 屬性。下面是我們按鈕的代碼:



    <div class="btn-group" data-toggle="buttons">

        <label class="btn btn-primary" ng-model="bigData.breakfast" btn-checkbox>

          Breakfast

        </label>

        <label class="btn btn-primary" ng-model="bigData.lunch" btn-checkbox>

          Lunch

        </label>

        <label class="btn btn-primary" ng-model="bigData.dinner" btn-checkbox>

          Dinner

        </label>

    </div>
    </pre>


    現在,當我們點擊按鈕時,我們可以看到該模型的變化,就像我們希望的那樣。


    使用UI Bootstrap折疊指令


    對于折疊,我們將基于isCollapsed變量的值打開和關閉面板。因此,我們將使用 ng-click="isCollapsed=!isCollapsed"。這將觸發我們的isCollapsed變量從而切換面板。



    <div class="panel panel-default">

        <div class="panel-heading">

          <h4 class="panel-title">

            <a href="#" ng-click="isCollapsed = !isCollapsed">

              Collapsible Group Item #1

            </a>

          </h4>

        </div>

        <div collapse="isCollapsed">

          <div class="panel-body">Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.

          </div>

        </div>

    </div>

    </pre>

    現在,我們兩個組件都可以工作了!在美麗時尚的Angular中,設置一個變量,看著它影響一些視圖。




    來自:http://ourjs.com/detail/54e18c51232227083e000034

     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!