Как выбрать первый объект в объекте в AngularJS?
Основная проблема, с которой мы имеем дело, заключается в том, что для объекта из объектов чтение объекта определенной позиции индекса не так просто, как список. Мы не можем перебрать его с помощью ngFor, поскольку объект не считается итеративным . Важность этой проблемы может возникнуть, если данные, полученные из любого источника, представляют собой объект, содержащий объекты (например, файлы JSON).
Изменять исходный файл очень неудобно, поэтому нам нужно иметь возможность что-то делать в самом приложении. Самый действенный способ кроется в самой проблеме. Если объекты не являются итерируемыми, преобразуйте их в итерируемые объекты.
Ниже рассматриваются два подхода к решению этой проблемы.
- Подход 1:
- Использование директивы ng-repeat и фильтра limitTo.
- ng-repeat может перебирать свойства объектов, которые в нашем случае сами являются объектами. Используется следующий синтаксис:
<div ng-repeat = "(ключ, значение) в myObj"> ... </ div>
- limitTo filter создает новый массив или строку, содержащую только указанное количество элементов. Элементы берутся либо из начала конца исходного массива, либо из строки, либо из числа, в зависимости от значения и знака (положительного или отрицательного) предела.
Синтаксис:
привязка html: {{limitTo_expression | limitTo: limit: begin}}
Примеры: значение лимита можно изменить, чтобы получить элемент (в данном случае объект) итерируемого
<!DOCTYPE html>
<
html
>
<
head
>
<
title
>Angular first object in object</
title
>
<
script
src
=
</
script
>
</
head
>
<
body
ng-app
=
'MyApp'
ng-controller
=
'MyCtrl'
>
<
div
ng-repeat
=
"(key, obj) in institute | limitTo : 1"
>
<
ul
>
<
li
ng-repeat
=
"(prop, value) in obj"
>
{{prop}}: {{value}}
</
li
>
</
ul
>
</
div
>
<
script
>
var app = angular.module('MyApp', []);
app.controller('MyCtrl', function($scope) {
$scope.institute = {
'school': {
location: 'Jamshedpur',
name: 'RV'
},
'college': {
location: 'Kolkata',
name: 'Jadavpur'
}
};
var instilist = new Array();
for (key of Object.keys($scope.institute)) {
instilist.push($scope.institute[key]);
}
$scope.institute = instilist;
});
</
script
>
</
body
>
</
html
>
Вывод: это элементы первого объекта института объекта (упомянутого в коде выше).
- Подход 2:
- Преобразуйте объект объектов в массив объектов и используйте метод индексации квадратных скобок ([]) для отображения первого объекта массива.
Синтаксис:
{{name_of_the массива [индекс]}}
Примеры: значение индекса равно 0 для первого объекта массива. Поскольку элементы массива являются объектами, мы можем ссылаться на свойства объектов с помощью оператора (.).
<!DOCTYPE html>
<
html
>
<
head
>
<
title
>Angular first object in object</
title
>
<
script
src
=
</
script
>
</
head
>
<
body
>
<
div
ng-app
=
"MyApp"
ng-controller
=
"MyCtrl"
>
<
p
>The Name of the school is: {{institute[0].name}}</
p
>
</
div
>
<
script
>
var app = angular.module('MyApp', []);
app.controller('MyCtrl', function($scope) {
$scope.institute = {
school: {
location: 'Jamshedpur',
name: 'RV'
},
college: {
location: 'Kolkata',
name: 'Jadavpur'
}
};
var instilist = new Array();
for (key of Object.keys($scope.institute)) {
instilist.push($scope.institute[key]);
}
$scope.institute = instilist;
});
</
script
>
</
body
>
</
html
>
Вывод: показывает одно из свойств первого объекта института объекта (упомянутого в приведенном выше коде).