2016-06-11 3 views
0

Я пытаюсь использовать вложенный ng-repeat, а во втором я должен фильтровать в соответствии с ng-model, который я задал раньше. Но во второй ng-repeat мне нужно поместить ng-if, который зависит от имени поля.ng-repeat: Как получить доступ к названию поля

Дело в том, что я попытался использовать форму (ключ, значение) (которая работает отлично), но тогда очень раздражает применение фильтра. Поэтому мне было интересно, есть ли доступ к полю имени.

Например:

<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

В идеале этот код фильтра не должен находиться в вашем представлении (html-файл), а в вашем контроллере как функция, оцененная ng-show/ng-if function. = который вызывается из вашего представления.

0

Вы могли бы в конечном итоге иметь функцию оценки результата, и с помощью Object.keys вы можете получить имя поля и сравнить ее.

Поскольку угловая петля проходит через значения вашего объекта, для получения фактического поля вам понадобится индекс 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; 
} 
0

Вы можете использовать $ индекс для получения доступа к 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' 
     } 
     ] 
    ]; 
    }); 
0

Спасибо, за anwsers, я решил так:

<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); 
}); 
Смежные вопросы