將BootstrapJS和AngularJS結合使用以及為什么不用jQuery
但是,把它們放在一起使用還有一些問題,特別是當你試圖在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.bootstrapangular.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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!