?
Dieses Dokument verwendet PHP-Handbuch für chinesische Websites Freigeben
ngRepeat
指令為集合中的每項實例化一個模板。每個模板的實例擁有自己的域,使用循環(huán)變量指向當(dāng)前集合項上,$index
指向當(dāng)前項的索引或鍵值。
特殊屬性應(yīng)用于每個模板實例的本地域上,包括:
變量 | 類型 | 詳述 |
---|---|---|
$index |
number | 重復(fù)元素的迭代偏移值(0..length-1) |
$first |
boolean | 如果是重復(fù)元素的第一個迭代項則為true |
$middle |
boolean | 如果是在重復(fù)元素的第一個和最后一個之間的迭代項則為true |
$last |
boolean | 如果是重復(fù)元素的最后一個迭代項則為true |
$even |
boolean | 如果迭代項的位置$index 是偶數(shù)則為true(其它為false) |
$odd |
boolean | 如果迭代項的位置$index 為奇數(shù)則為true(其它為false) |
這些也可以用ngInit
創(chuàng)建別名。這在實例化嵌套ngRepeats時很有用。
為了解決重復(fù)元素序列只有一個父元素的情況,ngRepeat (不同于其它ng指令)支持?jǐn)U展重復(fù)范圍,通過使用ng-repeat-start 和 ng-repeat-end分別定義明確的開始和結(jié)束點(diǎn)。ng-repeat-start 指令工作方法類似ng-repeat,但是會重復(fù)從標(biāo)簽定義本身位置開始到ng-repeat-end定義位置之間的所有HTML代碼。
這個例子演示了它的使用場景:
<header ng-repeat-start="item in items">
Header {{ item }}
</header>
<div class="body">
Body {{ item }}
</div>
<footer ng-repeat-end>
Footer {{ item }}
</footer>
如果上面例子中的items變量的值為['A','B'],則輸出結(jié)果為:
<header>
Header A
</header>
<div class="body">
Body A
</div>
<footer>
Footer A
</footer>
<header>
Header B
</header>
<div class="body">
Body B
</div>
<footer>
Footer B
</footer>
為 ngRepeat指定開始和結(jié)束點(diǎn)也支持AngularJS中的所有其它HTML指令語法(例如data-ng-repeat-start, x-ng-repeat-start 和 ng:repeat-start)。
<ANY
ng-repeat="">
...
</ANY>
.enter - 當(dāng)一個新的項添加到列表或條目經(jīng)過過濾顯示時
.leave - 當(dāng)一個項從列表中刪除或當(dāng)一個項被過濾掉時
.move - 當(dāng)相鄰的一個項被過濾掉引起重新排序,或當(dāng)條目內(nèi)容進(jìn)行重新排序時
點(diǎn)擊這里 了解更多關(guān)于涉及動畫的步驟。參數(shù) | 類型 | 詳述 |
---|---|---|
ngRepeat | repeat_expression |
決定如果枚舉集合的表達(dá)式。當(dāng)前支持的格式有:
|
這個例子在域中初始化一個名字列表,并使用ngRepeat
顯示每個人:
<div ng-init="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'}
]">
I have {{friends.length}} friends. They are:
<input Type="search" ng-model="q" placeholder="filter friends..." />
<ul class="example-animate-container">
<li class="animate-repeat" ng-repeat="friend in friends | filter:q">
[{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old.
</li>
</ul>
</div>
.示例:-animate-container {
background:white;
border:1px solid black;
list-style:none;
margin:0;
padding:0 10px;}
.animate-repeat {
line-height:40px;
list-style:none;
box-sizing:border-box;}
.animate-repeat.ng-move,.animate-repeat.ng-enter,.animate-repeat.ng-leave {
-webkit-transition:all linear 0.5s;
transition:all linear 0.5s;}
.animate-repeat.ng-leave.ng-leave-active,.animate-repeat.ng-move,.animate-repeat.ng-enter {
opacity:0;
max-height:0;}
.animate-repeat.ng-leave,.animate-repeat.ng-move.ng-move-active,.animate-repeat.ng-enter.ng-enter-active {
opacity:1;
max-height:40px;}
var friends = element.all(by.repeater('friend in friends'));
it('should render initial data set', Function() {
expect(friends.count()).toBe(10);
expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.');
expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.');
expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.');
expect(element(by.binding('friends.length')).getText())
.toMatch("I have 10 friends. They are:");});
it('should update repeater when filter predicate changes', Function() {
expect(friends.count()).toBe(10);
element(by.model('q')).sendKeys('ma');
expect(friends.count()).toBe(2);
expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.');
expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.');
});