У меня есть угловое приложение, которое делает вызов $http
вызовом сценария php, который перекликается с объектом JSON. Раньше у меня были данные JSON, написанные непосредственно внутри контроллера, но затем я должен был добавить некоторую проверку перед ее отображением, поэтому я сделал этот php-скрипт.Ошибка: [ngRepeat: dupes] при попытке доступа к вложенным данным JSON
Я использовал this tool, чтобы проверить, действительно ли мои данные JSON действительны. Я могу видеть данные с firebug (и в моей консоли, так как я это console.log
), и мне это кажется прекрасным, но по некоторым причинам я получаю следующее сообщение об ошибке: Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: stran in vsebina, Duplicate key: string: , Duplicate value:
.
Я понятия не имею, что происходит.
Вот мой контроллер:
'use strict';
angular.module('ZICApp')
.controller('FotokopirnicaController', function ($scope, $http) {
$scope.vsebina = [];
$http.get('http://localhost/ZIC/ip%20test/fotokopirnica.php').
success(function(data) {
console.log(data);
$scope.vsebina = data;
}).
error(function(data) {
console.log(data);
});
});
мой взгляд:
<div ng-repeat="stran in vsebina">
<div class="panel-content">
<div>
<p class="center">{{ stran.greeting }}</p>
<br>
<br>
<p class="fotokopirnica-title">{{ stran.title }}</p>
</div>
</div>
<div class="panel-content">
<div class="row " ng-repeat="panel in stran.panels">
<div class="col-xs-8 subheading fotokopirnica-content"><p>{{ panel.title }}</p></div>
<div class="col-xs-2 cena subheading fotokopirnica-content" ng-show="panel.row1"><p>{{ panel.row1 }}</p></div>
<div class="col-xs-2 cena subheading fotokopirnica-content" ng-show="panel.row2"><p>{{ panel.row2 }}</p></div>
<div class="col-xs-2 cena subheading fotokopirnica-content" ng-show="panel.singleRow"><p> </p></div>
<div class="col-xs-2 cena subheading fotokopirnica-content" ng-show="panel.singleRow"><p> {{ panel.singleRow }}</p></div>
<div ng-repeat="row in panel.content">
<div class="col-xs-8">{{ row.item }}</div>
<div class="col-xs-2 cena">{{ row.row1 }}</div>
<div class="col-xs-2 cena">{{ row.row2 }}</div>
</div>
</div>
</div>
</div>
ответ запрос GET:
{
"greeting":"Za potrebe sodelavcev IJS tiskamo, fotokopiramo, skeniramo in vežemo dokumente.",
"title":"IJS cenik fotokopiranja",
"panels":[
{
"title":"ČB fotokopiranje",
"row1":"A4",
"row2":"A3",
"content":[
{
"item":"Fotokopija",
"row1":"0,06 €",
"row2":"0,09 €"
},
{
"item":"Fotokopija na barvni papir",
"row1":"0,10 €",
"row2":"0,15 €"
},
{
"item":"Fotokopija vezanega gradiva",
"row1":"0,07 €",
"row2":"0,10 €"
},
{
"item":"Fotokopija na prosojnico",
"row1":"0,65 €",
"row2":"/"
},
{
"item":"Skeniranje",
"row1":"0,10 €",
"row2":"0,10 €"
}
]
},
{
"title":"Barvno fotokopiranje",
"row1":"A4",
"row2":"A3",
"content":[
{
"item":"Fotokopija 80g papir",
"row1":"0,60 €",
"row2":"0,90 €"
},
{
"item":"Fotokopija vezanega gradiva 80g papir",
"row1":"0,70 €",
"row2":"1,00 €"
},
{
"item":"Fotokopija 100g papir",
"row1":"1,00 €",
"row2":"1,50 €"
},
{
"item":"Fotokopija na prosojnico",
"row1":"1,40 €",
"row2":"/"
},
{
"item":"Skeniranje",
"row1":"0,10 €",
"row2":"0,10 €"
}
]
},
{
"title":"Vezave",
"singleRow":" ",
"content":[
{
"item":"Termo vezava do 50 listov",
"row2":"1,13 €"
},
{
"item":"Termo vezava nad 50 listov",
"row2":"1,46 €"
},
{
"item":"Vezava A",
"row2":"1,25 €"
},
{
"item":"Vezava B",
"row2":"1,46 €"
},
{
"item":"Vezava C",
"row2":"1,90 €"
},
{
"item":"Ovitek",
"row2":"0,42 €"
}
]
},
{
"title":"Ostale Storitve",
"singleRow":"ura",
"content":[
{
"item":"Zgibanje na stroju",
"row2":"23,48 €"
},
{
"item":"Ročno delo",
"row2":"21,39 €"
}
]
},
{
"title":"Količinski popusti",
"singleRow":" ",
"content":[
{
"item":"ČB fotokopija, 500-1000",
"row2":"15%"
},
{
"item":"ČB fotokopija, nad 1000",
"row2":"33%"
},
{
"item":"Barvna fotokopija, 80g papir, 25-50",
"row2":"25%"
},
{
"item":"Barvna fotokopija 80g papir, nad 50",
"row2":"40%"
}
]
}
]
Я думал, что Allready делать это, объявляя '$ scope.vsebina = [] ; ', а затем присвоение ему данных (см. контроллер) –
Ваш json-код начинается с' {'и заканчивается' '' ', какой из них правильный? – atinder
это правильно без квадратной скобки, должно заканчиваться фигурной скобкой '}' –