2017-07-06 17 views
0

ジェネレータ:AngularJS、mdList、NGリピートや発電

$scope.inside = [...]; 

var generator  = function*() { 
    var l = Math.ceil($scope.inside.length/3); 
    for (var i = 0; i < 3; i++) { 
     yield $scope.inside.slice(l * i, l * (i + 1)); 
    } 
}; 
$scope.insideDivided = generator(); 

テンプレート:

<md-list flex ng-repeat="column in [1,2,3]"> 
    <md-list-item ng-click="log(button.url)" ng-repeat="button in insideDivided.next().value"> 
     {{log(button)}} 
     {{button.title}} 
    </md-list-item> 
</md-list> 

命令{{log(button)}}

Object {title: "someTitle1", url: "/inside/fake.html", $$hashKey: "object:13"} root.js:100 
Object {title: "someTitle2", url: "/inside/fake.html", $$hashKey: "object:14"} root.js:100 
Object {title: "someTitle3", url: "/inside/fake.html", $$hashKey: "object:15"} 
.... 

を慰めるために、正しい項目を書くしかし、唯一の空の<md-list>

を作成します
<!-- ngRepeat: column in [1,2,3] --><md-list flex="" ng-repeat="column in [1,2,3]" role="list" class="ng-binding ng-scope flex"> 

     <!-- ngRepeat: button in insideDivided.next().value --> 
    </md-list><!-- end ngRepeat: column in [1,2,3] --><md-list flex="" ng-repeat="column in [1,2,3]" role="list" class="ng-binding ng-scope flex"> 

     <!-- ngRepeat: button in insideDivided.next().value --> 
    </md-list><!-- end ngRepeat: column in [1,2,3] --><md-list flex="" ng-repeat="column in [1,2,3]" role="list" class="ng-binding ng-scope flex"> 

     <!-- ngRepeat: button in insideDivided.next().value --> 
    </md-list><!-- end ngRepeat: column in [1,2,3] --> 

なぜng-repeatが機能するのですか?create md-list-item

PS「あなたの投稿が主にコードであるように見えるので、いくつかの詳細を追加してください。

答えて

1

ng-repeatはジェネレータを認識していません。まずそれを配列に変換し、それを反復処理する必要があります。

ここにgithubの問題があります。 https://github.com/angular/angular.js/issues/15202

すぐにサポートされないようです。

+0

ジェネレータは、 'Object {value:yielded_value、done:false} 'のようなオブジェクトを返します。これを反復すると、 'yielded_value'と' false'で2つのステップが発生します。私の場合、 'yielded_value'は反復のための配列です – rjhdby

+0

@rjhdby私の更新された答えをご覧ください。 ngRepeatはジェネレータ関数を使用できません。最初に配列に値をプッシュし、代わりにngRepeatを反復処理する必要があります。 – adam0101