1. 程式人生 > >AngularJs——ng-repeat總結

AngularJs——ng-repeat總結

剛開始學習angularJs用ng-repeat覺得很簡單就和jsp一樣,後來在做專案的過程中問題就一一的展現出來了

1、ng-repeat與ng-model的結合

首先我們來看一段程式碼,然後再來解釋,這段程式碼有什麼問題,應該怎麼去改

  <div class="info-table">
        <div class="info-line"></div>
        <div ng-repeat="rule in assess.scoleRules" class="scoleAssess">
        <div class="mon_content">
        <input type="checkbox" ng-model="assess.check" ng-init="assess.check = false"  ng-checked="assess.checked">
        <span>{{rule.Name}}(總分{{rule.Score}}分)</span>
        </div>
        <div class="mon_content">
        <span class="span4">評分規則:{{rule.Remark}}</span>
        </div>
        <div class="mon_content">
        <span class="span2">扣分:</span>
        <input type="text" ng-init="rule.deductScore = ''" ng-model="rule.deductScore"/>
        </div>
        <div class="mon_content">
        <span class="span2">說明:</span>
        <textarea  ng-init="rule.deductRemark = ''" ng-model="rule.deductRemark"></textarea>
        </div>
        </div>
       </div>

一般我們用ng-repeat的時候就是這樣,講 assess.scoleRules裡的資料依次的展示出來,然而,我們執行後會發現問題,就是checkbox裡的資料,再迴圈後ng-model的只是一樣的,如果你選中一個其他的就都一起被選中了,遇到了這樣的問題我們應該怎樣解決呢?

首先我們要將ng-model的名稱換成rule.check,每一次迴圈後的ng-model控制的就不是同樣的,然而接下來又有個問題出現了,那麼我怎麼樣才能在js裡知道那些被選中了了呢?畢竟雖然他們控制的是不一樣的但是ng-model的名稱是一樣的,如果我們直接在js裡用ng-model的值是不可行的

解決這個問題,我們可以有很多方案,這裡介紹一個相對簡便的方案,就是直接獲得assess.scoleRules,然後通過for迴圈,來判斷,assess.scoleRules.check的值,當他為true時則說明她被選中了

var detail = $scope.assess.scoleRules;
detail.forEach(function(e){  
 if(e.check&&e.deductScore!=""){
  $scope.assess.markingRule[$scope.assess.markingRule.length] = {
  "monthEvaluateId":$scope.assess.evaluateProblem.monthEvaluateId,
  "evaluateProblemId":$scope.assess.evaluateProblemId,"scoreRuleId": e.Id,
  "scoreRuleName":e.Name,"deductScore":e.deductScore,"remark":e.deductRemark};
  }
});

2、filter:過濾,可以用作篩選,簡便了操作可以不用再通過條件到後臺重新取資料然後在生成表,加快了效率

jsp:

<div class="well">
    <span class="label">search all,對整條資料進行搜尋:</span>
    <input type="search" ng-model="q" placeholder="filter friends..."/> <span class="text-muted">加上字首 ! 可以取反</span><br/><br/>


    <span class="label">age 判斷年齡大於></span>
    <input type="search" ng-model="age" placeholder="filter friends..."/><br/><br/>


    <span class="label">search by name通過姓名來搜尋:</span>
    <input type="search" ng-model="query.name" placeholder="filter friends..."/><br/><br/>


    <span class="label">search by gender通過性別來搜尋:</span>
    <input type="search" ng-model="query.gender" placeholder="filter friends..."/><br/><br/>


    <span class="label">use filter in controller通過js裡的要求來搜尋:</span>
    <input type="search" ng-model="qInCtrl" placeholder="filter friends..."/><br/><br/>


    <span class="label">limit展示的限制:</span>
    <input type="search" ng-model="limit" placeholder="limit friends..." ng-init="limit=10"/><br/><br/>


    <span class="label">order by按照什麼來排序:</span> <select ng-model="friendsOrderBy" ng-options="o for o in orderByOptions"></select>&nbsp;&nbsp;
    reverse: <label><input type="radio" ng-model="reverse" value="false">false</label>
             <label><input type="radio" ng-model="reverse" value="true">true</label><br/><br/>


    <ul class="example-animate-container">
        <li ng-class="{odd:$odd,even:$even}"
            ng-repeat=" friend in friends | filter:q | filter:filterAge | filter:query | orderBy:friendsOrderBy:reverse | limitTo:limit">
            [{{$index + 1}}] {{friend.name}} is {{friend.age}} years old {{friend.gender}}.
        </li>
    </ul>
</div>

js:

function Ctrl($scope, $filter) {

//迴圈的資料
            $scope.friends =  [
                {name:'John', age:25, gender:'boy'},
                {name:'Jessie', age:30, gender:'girl'},
                {name:'Johanna', age:28, gender:'girl'},
                {name:'Joy', age:15, gender:'girl'},
                {name:'Mary', age:28, gender:'girl'},
                {name:'Peter', age:95, gender:'boy'},
                {name:'Sebastian', age:50, gender:'boy'},
                {name:'Erika', age:27, gender:'girl'},
                {name:'Patrick', age:40, gender:'boy'},
                {name:'Samantha', age:60, gender:'girl'}
            ];

//按照什麼來排序
            $scope.orderByOptions = ["name","age","gender"];
            $scope.friendsOrderBy = "name";

//判斷年齡大於輸入值的資料
            $scope.age = 0;
            $scope.filterAge = function(item){
                return item.age > $scope.age;
            };


//按照輸入值對整條資料進行搜尋
            var _friends = angular.copy($scope.friends);
            $scope.$watch("qInCtrl", function(value){
                $scope.friends = $filter("filter")(_friends, value);
            });


        }

3、ng-repeat-start,ng-repeat-end:迴圈的範圍從開始到結束,並不是按標籤結束

<div ng-repeat-start="team in teams" class="header">{{team.name}}</div>
<div ng-repeat="player in team.players">{{player.firstName}} {{player.lastName}}</div>
<div ng-repeat-end><br /></div>

相關推薦

AngularJs——ng-repeat總結

剛開始學習angularJs用ng-repeat覺得很簡單就和jsp一樣,後來在做專案的過程中問題就一一的展現出來了 1、ng-repeat與ng-model的結合 首先我們來看一段程式碼,然後再來解釋,這段程式碼有什麼問題,應該怎麼去改   <div class="

AngularJs ng-repeat解決迴圈物件出現重複項報錯的問題

問題:ng-repeat  的迴圈物件是不能出現重複項的,所以如果有重複的就會報錯,應該是 key value的問題吧,不是很瞭解內部執行機制;經過查詢發現 在 迴圈後面加上  track by $index 就會解決問題,也就可以有重複物件了 報錯:   劃

angularjs ng-repeat單選框和下拉框的實現

單選框 見以下程式碼: <div class="form-group " > <label class="col-sm-2 control-label"&

AngularJS ng-repeat表格巢狀迴圈

<tr ng-repeat = "item in tableData"> <td ng-class="{'no-border-top': $index != 0}" wid

AngularJS ng-repeat繫結input元素的值

使用repeat迴圈輸出指定的HTML,繫結input元素。 ng-bind ng-bind在使用賦值表示式生成資料模型的同時,還繫結變數到元素的innerHTML中; ng-value ng-value在使用賦值表示式生成資料模型的同時,還繫結變數到元素

AngularJs ng-repeat 必須注意的效能問題

AngularJs 的 ng-repeat 讓我們非常方便的遍歷陣列生成 Dom 元素,但是使用不當也會有效能問題。 在專案中我們使用 ng-repeat 載入完一個列表後,如果再次請求資料,然後過濾列表,程式碼可能會這麼寫: <div ng-controller="Test"> <

【MVVM】- AngularJS ng-repeat 指令

外觀介面 <body ng-app=""> <

angularJS中的ng-repeat指令!

註意 func control wid 案例 del fis cnblogs ext ng-repeat 指令: ng-repeat 指令用來遍歷一個數組重復創建當前元素; <ul ng-app="myApp" ng-controller="myAppControl

angularjs ng-bind-html的用法總結

html標簽 白名單 href list函數 指令 app his itl tro angular中的$sanitize服務. 此服務依賴於ngSanitize模塊.(這個模塊需要加載angular-sanitize.js插件) 要學習這個服務,先要了解另一個指令:

AngularJS 獲取ng-repeat的動態ng-model

con $scope 對象 文件 spec input ram ng-repeat ng-model 首先ng-model設置為$parent.conf[$index]: 用$parent的原因是ng-repeat產生的,他會為每一個input生成一個子scope對象,而

AngularJSng-repeat迴圈中如何獲得被迴圈列表的索引值

使用angularJS框架的話都需要引入angular.min.js檔案,這個想必各位大佬都懂得,我就不多說了。 這裡主要說說AngularJS的ng-repeat迴圈中如何獲得被迴圈列表的索引值。 假如有一個表格: 程式碼如下: <table class="tabl

AngularJsng-repeat中動態使用ng-model進行雙向資料繫結

首先說明一下功能需求: 當點選一次增加按鈕的時候,下方就會多一行輸入框; 當點選一次刪除按鈕的時候,所點選的刪除按鈕那行的輸入框會消失; 當點選列印資訊按鈕的時候,把所有輸入框中的資料讀取出來,並列印到控制檯上。 由此可看出,帶有刪除按鈕的這部分DIV是動態的。

AngularJS最佳實踐: 請小心使用 ng-repeat 中的 $index

“有客戶投訴,說在刪除指定的某條記錄時,結果刪掉的卻是另外一條記錄!”看起來是個很嚴重的BUG。 有一次我們在工作中碰到了這個問題。 要定位這個BUG非常麻煩, 因為客戶也不清楚如何重現這個問題。後來發現這個Bug是由於在 ng-repeat 中使用了 $index 引發的。

angular.js中的ng-repeat限制迴圈次數limtTo()(專案總結)

之前做專案的時候是用老的angular.js做的,之前迴圈遍歷一直都是用ng-repeat,用ng-repeat的時候可以限制迴圈的次數,就是用limtTo,請看示例: <div class="tgw-desc-lie"> <div class=

angularjs中使用ng-repeat需要注意的東西

<tr ng-repeat="item in wlanList"> <td class="col-md-3" ng-click="showDetail(item)">

AngularJS中使用ng-repeat的index

AngularJS中的ng-repeat中,隱含的index,可以使用$index來訪問,也可以自己指定index對應的變數名。 - 使用隱含的index變數 隱含的index變數名是index,可以使用$index來訪問。 // 定義module和c

angularjs select標籤使用ng-repeat標籤之後,ng-model無法更新問題解決

    angularjs select標籤使用ng-repeat標籤之後,ng-model無法更新問題,百度了一下沒有發現原因,後來採用了jquery的方式進行首次賦值,如下過程: 我也遇到過這樣

【結構可用,只可用於展示】如何在angularjs的directive指令的template中使用ng-repeat?

因為自己再寫一個類似蘋果finder檔案管理器的效果,所以用到了這個功能,我被這個問題搞了一天左右。 上一篇的問題在這裡:我還沒有解決 我寫的程式碼: <div linkedlist listcolumns="{{cashAccountsColumns}}"><

angularjs radio、checkbox、ng-repeat

radio使用ng-repeat如何預設選中: html: <div class="excels"> <label ng-repeat="y in mytypeData"> <input type="radio" ng-mod

AngularJSng-repeat渲染完成事件和中間變數的引用

ng-repeat渲染完成事件 因為在用AngularJS期間, 經常用到ng-repeat, 而有時需要在其渲染完成時操作已經渲染的物件, 所以特在此記錄一下新增渲染事件的方法, 以方便以後的使用; 程式碼如下 myApp.directive('onRepeatFin