У меня есть страница, отображающая 3 изображения подряд, используя Ng-repeat, но независимо от того, какое изображение я нажимаю, я вижу только изображение FIRST, отображаемое в этой конкретной строке.
Шаблон:
<div id="galscrolldiv" class="row" ng-repeat="image in images" ng-if="$index % 3 === 0">
<div class="col col-33" ng-if="$index < images.length">
<div ng-click="seeOne(image)">
<img ng-src="{{images[$index].src}}" width="100%" />
</div>
</div>
<div class="col col-33" ng-if="$index + 1 < images.length">
<div ng-click="seeOne(image)">
<img ng-src="{{images[$index + 1].src}}" width="100%" />
</div>
</div>
<div class="col col-33" ng-if="$index + 2 < images.length">
<div ng-click="seeOne(image)">
<img ng-src="{{images[$index + 2].src}}" width="100%" />
</div>
</div>
</div>
Функция ng-click:
$scope.seeOne = function (image) {
window.localStorage['fbid'] = image.fbid;
$state.go('app.oneimg');
}
$ scope.images:
angular.forEach(value, function (value, key) {
if (key == 'photo') {
$scope.images.push({
id: i,
fbid: inventorykey,
src: ("data:image/jpeg;base64," + value)
});
i = i + 1;
}
})
Вы повторяете <div ng-click="seeOne(image)">
3 раза в этом примере, где image
относится только к первому из трех изображений, которые вы показываете. Если вы измените эту строку в соответствии с <img>
под ней, вы получите результат, который вы ищете. Что-то вроде этого:
<div id="galscrolldiv" class="row" ng-repeat="image in images" ng-if="$index % 3 === 0">
<div class="col col-33" ng-if="$index < images.length">
<div ng-click="seeOne(images[$index])">
<img ng-src="{{images[$index].src}}" width="100%" />
</div>
</div>
<div class="col col-33" ng-if="$index + 1 < images.length">
<div ng-click="seeOne(images[$index+1])">
<img ng-src="{{images[$index + 1].src}}" width="100%" />
</div>
</div>
<div class="col col-33" ng-if="$index + 2 < images.length">
<div ng-click="seeOne(images[$index+2])">
<img ng-src="{{images[$index + 2].src}}" width="100%" />
</div>
</div>
</div>
{{images[$index].src}}
неверно. вместо этого используйте {{image.src}}
.
Индекс $ будет меняться на каждой итерации, но есть только одна переменная. поэтому в конце рендеринга все изображения будут такими же, как и ссылки на один и тот же индекс. не имеет значения, какова была ценность при визуализации страницы. Это важно, каково значение в конце фазы углового переваривания.
Для достижения вашего варианта использования вам необходимо установить и использовать локальную переменную в области ng-repeat:
<div id="galscrolldiv" class="row" ng-repeat="image in images" ng-if="$index % 3 === 0" ng-init="myIndex = $index">
<div class="col col-33" ng-if="$index < images.length">
<div ng-click="seeOne(image)">
<img ng-src="{{images[myIndex].src}}" width="100%" />
</div>
</div>
Альтернатива: Поместите данные в правильную структуру (2-мерный массив) и используйте вложенный ng-repeat
- упрощает вашу жизнь
images[index]
, images[index+1]
и images[index+2]
.