angularjs入門-ng-repeat

angularjs入門-ng-repeat

其實我個人當初也是因為這點就愛上angularjs了,簡單方便,其實這個就好像c#的foreach,雖然angularjs2.0也已把語法改成foreach了,首先我先來解釋一下,前面幾篇的例子都還

沒提到,正常來說我們不應該是把javascript和html放在一起,我們應該會分類,當然談到架構的話會分得更仔細,但因為目前都還在記錄入門的部份,所以這些主題待以後再來

討論,那接下來我就要解釋一下ng-repeat還有把javascript從html分開來的寫法,範例如下,我先自己做個假的json,然後把資料顯示在頁面上,我先加了一個App的資料夾,然後直

接在裡面加一隻js檔,如下所示

 

image

image

image

在上面我有在js檔自定了一個json,然後在html部份,我則直接輸出,語法上就是跟foreach非常類似,這邊就不多加說明,但為了方便範例碼,我在此還是會直接把html和js的程式

碼放在一起

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
   
</head>
<body ng-app="App">
    <div ng-controller="FirstCtrl">
        <div ng-repeat="item in people">
            <span class="form-control">我叫{{item.name}}-我是{{item.sex}}</span>
        </div>
    </div>
    <script src="Scripts/angular.js"></script>
    <script>
        angular.module('App', [])
            .controller('FirstCtrl', function ($scope, $timeout) {
                $scope.people = [
                    { name: 'anson', sex: 'boy' },
                    { name: 'andy', sex: 'boy' },
                    { name: 'coco', sex: 'girl' },
                    { name: 'lucky', sex: 'dog' },
                    { name: 'micky', sex: 'mouse' },
                ];
        });
    </script>
</body>
</html>

 

ng-repate還有很多特性,比如下面的一些例子

  • $index:陣列的順序值
  • $first:第一筆的時候為true
  • $middle:不是第一筆也不是最後一筆時為true
  • $last:最後一筆為true
  • $even:當index是偶數為true
  • $odd當index是單數為true

這邊我給一個例子,使用了一些css語法然後再加上$first去顯示背景為紅色,下面的範例可以變換為各種屬性試試,然後我給一個編號用index自動編號

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
    <style>
        .change-color-true {
            background-color: red;
        }
    </style>
</head>
<body ng-app="App">
    <div ng-controller="FirstCtrl">
        <div ng-repeat="item in people">
            <span class="form-control change-color-{{$first}}">第{{$index}}號:我叫{{item.name}}-我是{{item.sex}}</span>
        </div>
    </div>
    <script src="Scripts/angular.js"></script>
    <script>
        angular.module('App', [])
            .controller('FirstCtrl', function ($scope, $timeout) {
                $scope.people = [
                    { name: 'anson', sex: 'boy' },
                    { name: 'andy', sex: 'boy' },
                    { name: 'coco', sex: 'girl' },
                    { name: 'lucky', sex: 'dog' },
                    { name: 'micky', sex: 'mouse' },
                ];
        });
    </script>
</body>
</html>
    

image

 

在來就是稍微的談了一下filter了,我們可以很方便的使用search的功能,實現搜尋資料集,範例如下

    <div ng-controller="FirstCtrl">
        <input type="text" ng-model="msg" />
        <div ng-repeat="item in people | filter:msg">
            <span class="form-control change-color-{{$first}}">第{{$index}}號:我叫{{item.name}}-我是{{item.sex}}</span>
        </div>
    </div>
    <script src="Scripts/angular.js"></script>
    <script>
        angular.module('App', [])
            .controller('FirstCtrl', function ($scope, $timeout) {
                $scope.people = [
                    { name: 'anson', sex: 'boy' },
                    { name: 'andy', sex: 'boy' },
                    { name: 'coco', sex: 'girl' },
                    { name: 'lucky', sex: 'dog' },
                    { name: 'micky', sex: 'mouse' },
                ];
            });
    </script>
</body>

image

 

如果我們想要搜尋name或sex各別欄位呢??那我們只要把ng-model改成msg.name或msg.sex,非常的方便,各位可以自行試試看效果,接著我們就談談ng-repeat-start和ng-repeat-end

囉,這兩個directive又是要幹嘛的呢?其實就是我們如果要在一個ng-repeat裡面要重覆產生同一個json資料,用這兩個就會非常方便,比如下面的例子

    <div ng-controller="FirstCtrl">
        <div ng-repeat-start="item in people">
            <span class="form-control change-color-{{$first}}">第{{$index}}號:我叫{{item.name}}-我是{{item.sex}}</span>
        </div>
        <ul>
            <li class="change-color-{{$first}}">{{$index}}:{{item.name}}是{{item.sex}}</li>
        </ul>
        <table ng-repeat-end>
            <tr class ="change-color-{{$first}}">
                <th>ng-repeat-end在這一行</th>
                <th>{{item.name}}:{{item.sex}}</th>
            </tr>
        </table>
    </div>
    <script src="Scripts/angular.js"></script>
    <script>
        angular.module('App', [])
            .controller('FirstCtrl', function ($scope, $timeout) {
                $scope.people = [
                    { name: 'anson', sex: 'boy' },
                    { name: 'andy', sex: 'boy' },
                    { name: 'coco', sex: 'girl' },
                    { name: 'lucky', sex: 'dog' },
                    { name: 'micky', sex: 'mouse' },
                ];
            });
    </script>
</body>

image

 

以上再請大家多多指教,希望能帶來幫助