0

AngularJS中的ng-repeat似乎不適用於生成器函數。它在控制器中按預期工作,但在HTML表達式中使用時,生成器似乎已被終止。你可以向一個有角度的noob解釋什麼是巫術嗎?使用發生器在AngularJS中迭代使用ng-repeat不能按預期工作

function Main($scope) { 
    $scope.items = function*() { 
    //console.log(1); 
    yield 1; 
    //console.log(2); 
    yield 2; 
    return null; 
    }(); 
    //console.log($scope.items); 
    //console.log($scope.items.next().value); 
    //console.log($scope.items.next().value); 
} 


<div ng-app ng-controller="Main"> 
    <h2>{{items.next()}}</h2> 
    <div ng-repeat="item in items"> 
    Hi {{item}} 
    </div> 
</div> 

http://jsfiddle.net/4ouae9wm/1/

回答

3

爲了生成函數會返回一個可迭代它應該items()被稱爲發電機,items僅僅是一個函數。在這種情況下,這仍然不起作用。

Iterables(和生成器是那些)意味着在傳統JS循環中進行特殊處理,這涉及到監視generator.next().done狀態以結束循環。 for...of循環用於透明地處理迭代。

發電機沒有length屬性,並不一定是有限的。 ngRepeat通過使用length屬性循環通過對象密鑰或循環中的array-likes,它不知道迭代器/發生器。

如果發生器是有限的,它應該被轉換爲數組,然後它纔會被送到ngRepeat

相關問題