我尝试使用嵌套的ng-repeat
,而在第二个我需要根据我之前设置的ng-model
进行过滤。但是在第二个ng-repeat
内,我需要放置一个取决于字段名称的ng-if
。
问题是我尝试使用(键,值)形式(效果很好)但是应用过滤器非常烦人。所以我想知道是否有办法访问名称字段。
例如:
<tbody>
<tr ng-repeat="item2 in items2">
<td ng-repeat="val in item2 | filer:blabla" ng-if="val.field != 'foto'">{{val}}</td>
</tr>
</tbody>
答案 0 :(得分:0)
您最终可以使用函数评估结果,使用Object.keys
可以获取字段的名称并进行比较。
由于angular将循环遍历对象的值,因此您需要使用ng-repeat
索引来获取实际字段。
在html中:
<tbody>
<tr ng-repeat="item2 in items2">
<td ng-repeat="val in item2 | filer:blabla"
ng-if="shouldBeVisible(item2, $index, 'foto')">{{val}}</td>
</tr>
</tbody>
在控制器中:
$scope.shouldBeVisible = (item, $index, prop)=>{
return Object.keys(item)[$index] !== prop;
}
答案 1 :(得分:0)
您可以使用$ index访问val.field
示例:jsfiddle
HTML
<div ng-app="myApp">
<ul ng-controller="MyCtrl">
<li ng-repeat="item in items">
{{item[0].field}} <!-- just a sanity check -->
<ul>
<li ng-repeat="val in item" ng-if="item[$index].field !== 'apple'">{{val.value}}</li>
</ul>
</li>
</ul>
</div>
码
angular.module('myApp', [])
.controller('MyCtrl', function($scope){
$scope.items = [
[
{
field: 'apple',
value: 'pie'
},
{
field: 'chocolate',
value: 'cake'
}
]
];
});
答案 2 :(得分:0)
谢谢,对于这些,我解决了这个问题:
<tr ng-repeat="item2 in items2">
<td ng-repeat="ite in item2" >
<img width="50px" ng-if="$index == 0" ng-src="{{ite}}" lazy-src/>
<span ng-if="$index != 0">{{ite}}</span>
</td>
</tr>
因为我以这种方式从数据库中获取数据:
app.controller("getItems2", function ($scope, $http, $rootScope) {
var gi2 = this;
$rootScope.$on("itemClicked",function(event,id){
console.log(id);
gi2.getItems(id);
});
this.getItems = function(idClase){
$http.get('main/getItems2?idClase='+idClase).
then(function (response) {
$scope.columns = [];
response.data.forEach(function(e){
e.Foto = "img/"+e.Foto;
});
$scope.items2 = response.data;
console.log($scope.items2);
}, function (err) {
console.log(err);
// log error
});
};
this.getItems(1);
});
答案 3 :(得分:0)
理想情况下,此过滤器代码不应位于您的视图(html文件)中,而应位于控制器中,作为由ng-show / ng-if function。=评估的函数,将从您的视图中调用。