ng-repeat 为嵌套的 ng-repeats 动态创建数组
ng-repeat dynamically create arrays for nested ng-repeats
是否可以让 ng-repeat 为嵌套的 ng-repeat 动态创建数组?
我知道这听起来很傻,但我本质上是在寻找这样的东西,希望有人能告诉我这是一个多么糟糕的想法并提出更好的解决方案:
<tbody ng-repeat="row in myRows track by $index">
<tr>{{row.name}}</tr>
<tr ng-repeat="subRow in myRows$index>{{subRow.name}}</tr>
</tbody>
所以想法是第一 <tr>
行实际上有一个按钮,单击后将显示子行。所以一旦点击(在它实际显示行之前),我将创建数组,例如:
myRows0 = [{name:"Sub Row A", value:1},
{name:"Sub Row B", value:2}];
或者如果点击了第二行,我将创建:
myRows1 = [{name:"Sub Row C", value:3},
{name:"Sub Row D", value:4}];
我假设这样的事情不会起作用,因为 ng-repeat 需要先创建数组,然后才能创建 DOM。那是对的吗?但是我不确定我还能如何使用这个 table 结构来创建这样的东西。有帮助吗?
这是可能的,在我看来这不是一个坏主意,例如,如果您的子行数据很大或者它们是图像,您可能只想在用户点击 displaySubRow 项目时加载您的子行数据,以避免放置给您的服务器带来不必要的负担或让您的用户等待。
工作Plunker
示例代码
html
<table>
<tbody ng-repeat="item in data" ng-init="item.show = false">
<tr>
<td>
<button ng-show="item.show==false" ng-click="getRowSubItems(item)">Show</button>
<button ng-show="item.show==true" ng-click="item.show = false">Hide</button>
</td>
<td>
{{item.name}}
</td>
</tr>
<tr ng-show="item.show == true">
<td>
</td>
<td>
<div ng-repeat="subItem in item.cars">
{{subItem}}
</div>
</td>
</tr>
</tbody>
</table>
js
$scope.data =
[{"name":"Lex",
"age":43
},
{"name":"Alfred",
"age":30
},
{"name":"Diana",
"age":35
},
{"name":"Bruce",
"age":27
},
{"name":"Oliver",
"age":32
}];
$scope.getRowSubItems = function(item){
//you can also make a http call to get data from your server
item.show = true;
if(item.name == "Lex"){
$http.get('https://jsonplaceholder.typicode.com/posts/1')
.then(function(response) {
item.cars = response.data;
});
}
else{
item.cars = [ "Ford", "BMW", "Fiat" ];
}
}
是否可以让 ng-repeat 为嵌套的 ng-repeat 动态创建数组?
我知道这听起来很傻,但我本质上是在寻找这样的东西,希望有人能告诉我这是一个多么糟糕的想法并提出更好的解决方案:
<tbody ng-repeat="row in myRows track by $index">
<tr>{{row.name}}</tr>
<tr ng-repeat="subRow in myRows$index>{{subRow.name}}</tr>
</tbody>
所以想法是第一 <tr>
行实际上有一个按钮,单击后将显示子行。所以一旦点击(在它实际显示行之前),我将创建数组,例如:
myRows0 = [{name:"Sub Row A", value:1},
{name:"Sub Row B", value:2}];
或者如果点击了第二行,我将创建:
myRows1 = [{name:"Sub Row C", value:3},
{name:"Sub Row D", value:4}];
我假设这样的事情不会起作用,因为 ng-repeat 需要先创建数组,然后才能创建 DOM。那是对的吗?但是我不确定我还能如何使用这个 table 结构来创建这样的东西。有帮助吗?
这是可能的,在我看来这不是一个坏主意,例如,如果您的子行数据很大或者它们是图像,您可能只想在用户点击 displaySubRow 项目时加载您的子行数据,以避免放置给您的服务器带来不必要的负担或让您的用户等待。
工作Plunker
示例代码
html
<table>
<tbody ng-repeat="item in data" ng-init="item.show = false">
<tr>
<td>
<button ng-show="item.show==false" ng-click="getRowSubItems(item)">Show</button>
<button ng-show="item.show==true" ng-click="item.show = false">Hide</button>
</td>
<td>
{{item.name}}
</td>
</tr>
<tr ng-show="item.show == true">
<td>
</td>
<td>
<div ng-repeat="subItem in item.cars">
{{subItem}}
</div>
</td>
</tr>
</tbody>
</table>
js
$scope.data =
[{"name":"Lex",
"age":43
},
{"name":"Alfred",
"age":30
},
{"name":"Diana",
"age":35
},
{"name":"Bruce",
"age":27
},
{"name":"Oliver",
"age":32
}];
$scope.getRowSubItems = function(item){
//you can also make a http call to get data from your server
item.show = true;
if(item.name == "Lex"){
$http.get('https://jsonplaceholder.typicode.com/posts/1')
.then(function(response) {
item.cars = response.data;
});
}
else{
item.cars = [ "Ford", "BMW", "Fiat" ];
}
}