Angularjs ng-repeat проблема

Надеюсь, что кто-нибудь сможет мне помочь с этим вопросом. Я новичок в angularjs. Я пытаюсь создать фотогалерею, где начальная страница представляет собой лист миниатюрных фотографий из twitter и instagram, созданных с помощью цикла angularjs ng-repeat. Когда пользователь наводит курсор на изображение, изображение исчезает и появляется кнопка, которую пользователь может нажать. При нажатии кнопки появляется наложение светового поля, показывающее полноразмерное изображение. Я разместил здесь последнюю версию в Интернете: http://www.petermingione.com/my-demo/ и скопировал приведенный ниже код. Мне удалось создать страницу эскизов с помощью цикла ng-repeat, и теперь я создаю часть приложения со световым коробом. Это наложение, которое вы видите, когда нажимаете кнопку просмотра. Как видите, независимо от того, на каком изображении вы нажимаете, единственное изображение, которое появляется, является первым изображением в коллекции. Похоже, это проблема с ng-repeat. Изображение находится в каждом объекте как mainImage.url, и я обращаюсь к нему через x.mainImage.url в цикле. Я не уверен, почему это не работает. Любая помощь, которую кто-либо может мне дать, будет принята с благодарностью. Код находится ниже и в Интернете:

<style>
    * {
        box-sizing: border-box;
        font-family: sans-serif;
    }
    h1, 
    h2{
        margin-left:10px;
    }

    .outer-wrapper{
        overflow: hidden;
    }
    .inner-wrapper{
        display:inline-block;
        vertical-align:top;
        padding:5px;
        position:relative;
    }
    .inner-wrapper img{
        width:100%;
    }
    .inner-wrapper .outer-caption{
        color:black;
        width:100%;
        padding-top:35%;
        background-color:#fc7cab;
        position:relative;
    }
    .inner-wrapper .outer-caption .inner-caption{
        font-size:14px;
        font-family:sans-serif;
        overflow:hidden;
        width:75%;
        height:70px;
        position:absolute;
        top:0;
        left:0;
        bottom:0;
        right:0;
        margin:auto;
    }
    .inner-wrapper .item-overlay-color{
        position: absolute;
        top:0;
        bottom:0;
        left:0;
        right:0;
        margin:auto;
        background-color: #fff;
        transition: all .5s;
        opacity: 0.0;   
    }
    .inner-wrapper:hover .item-overlay-color {
        opacity: 0.75;
    }
    .inner-wrapper .item-overlay-text{
        border: 2px solid #7e7e7e;
        color:#7e7e7e;
        font-size: 10px;
        position: absolute;
        top:0;
        bottom:0;
        left:0;
        right:0;
        width:70px;
        height:35px;
        line-height:35px;
        margin:auto;
        border-radius:1px;
        text-align: center;
        transition: all .5s;
        opacity: 0.0;
    }
    .inner-wrapper:hover .item-overlay-text {
        opacity: 1.0;
    }
    .inner-wrapper .page-overlay {
        position: fixed;
        width: 100%;
        height: 100%;
        top: 0; 
        left: 0;
        right: 0;
        bottom: 0;
        background-color: rgba(255,255,255,0.75);
        z-index: 2;
        cursor: pointer;
    }
    .inner-wrapper #page-overlay {
        opacity:0;
        transition: all .5s;
        pointer-events:none;
    }
    .inner-wrapper .page-overlay .text{
        position: absolute;
        top: 50%;
        left: 50%;
        font-size: 50px;
        color: white;
        transform: translate(-50%,-50%);
        -ms-transform: translate(-50%,-50%);
    }
    .inner-wrapper .page-overlay .text .close{
        position:absolute;
        top:0;
        right:0;
        color:#000;
        font-weight: lighter;
        font-size: 30px;
        line-height: 30px;
        padding-top:5px;
        padding-right:5px;
    }

    @media screen and (min-width: 1301px){
        .inner-wrapper{
            width:16.6666%;
        }
    }
    @media screen and (max-width: 1300px){
        .inner-wrapper{
            width:20%;
        }
    }
    @media screen and (max-width: 1024px){
        .inner-wrapper{
            width:25%;
        }
    }
    @media screen and (max-width: 768px){
        .inner-wrapper{
            width:50%;
        }
    }
    @media screen and (max-width: 480px){
        .inner-wrapper{
            width:100%;
        }
    }
</style>

<body> 
<div id = "outer-wrapper" class = "outer-wrapper">
    <div id = "inner-wrapper" class = "inner-wrapper" ng-repeat = "x in insideData">
        <img ng-if = "x.service=='Instagram'||(x.service=='Twitter' && x.mediaType=='image')" ng-src='{{x.thumbnails[0].url}}'>
        <div class = "outer-caption" ng-if = "x.service=='Twitter'&& x.mediaType!='image'">
            <div class = "inner-caption">{{x.caption}}</div>
        </div>
        <div class = "item-overlay-color"></div>
        <div class = "item-overlay-text" ng-click = "showOverlay()">VIEW</div>
        <div id = "page-overlay" class = "page-overlay">
                <div class = "text">
                    <!-- <img ng-src='{{x.thumbnails[0].url}}'> -->
                    <img ng-src='{{x.mainImage.url}}'>
                    <span class = "close" ng-click = "hideOverlay()">X</span>
                </div>
        </div>
    </div>
</div>
</body>
<script>
    // Create the module
    var appModule = angular.module('appName', []);

    // Create rootScope variables
    appModule.run(
        function($rootScope){
            $rootScope.title = "Taneleer Demonstration";
        }
    );

    // Create the controller
    appModule.controller('appCtrl', function($scope, $http) {

        $scope.showOverlay = function(){
            document.getElementById("page-overlay").style.opacity = 1;
            document.getElementById("page-overlay").style["pointer-events"] = "auto";
        }
        $scope.hideOverlay = function(){
            document.getElementById("page-overlay").style.opacity = 0;
            document.getElementById("page-overlay").style["pointer-events"] = "none";
        }

        $http({
                method : "GET",
                url : "https://taneleer.composedcreative.com/api/v1/feed/a0329f16-9225-11e6-89bb-296a97b9d609/bb0429f6-f0ca-11e7-8f5d-d92739a9a53f"
            }).then(function mySucces(response) {

                $scope.myMessage = "Success!";

                $scope.response = response;
                $scope.meta = response.data.meta;
                $scope.outsideData = response.data;
                $scope.insideData = response.data.data;
                $scope.links = response.data.links;

                $scope.selfLink = response.data.links.self;
                $scope.firstLink = response.data.links.first;
                $scope.lastLink = response.data.links.last;
                $scope.nextLink = response.data.links.next;
                $scope.prevLink = response.data.links.prev;

                $scope.statuscode = response.status;
                $scope.statustext = response.statusText;
                $scope.statusheaders = response.headers(); 
                $scope.statusconfig = response.config;   

            }, function myError(response) {
                $scope.myMessage = "Error!";
                $scope.response = response;
                $scope.statuscode = response.status;
                $scope.statustext = response.statusText;
                $scope.statusheaders = response.headers(); 
                $scope.statusconfig = response.config;   
            });


        $scope.getNext = function() {
            $http({
                method : "GET",
                url : $scope.nextLink
            }).then(function mySucces(response) {

                $scope.myMessage = "Success!";
                $scope.response = response;
                $scope.outsideData = response.data;
                $scope.meta = response.data.meta;

                $scope.insideData = $scope.insideData.concat(response.data.data);

                $scope.links = response.data.links;
                $scope.selfLink = response.data.links.self;
                $scope.firstLink = response.data.links.first;
                $scope.lastLink = response.data.links.last;
                $scope.nextLink = response.data.links.next;
                $scope.prevLink = response.data.links.prev;

                $scope.statuscode = response.status;
                $scope.statustext = response.statusText;
                $scope.statusheaders = response.headers(); 
                $scope.statusconfig = response.config;   

            }, function myError(response) {
                $scope.myMessage = "Error!";
                $scope.response = response;
                $scope.statuscode = response.status;
                $scope.statustext = response.statusText;
                $scope.statusheaders = response.headers(); 
                $scope.statusconfig = response.config;   
            });
        }
        $(window).scroll(function() {
            if ($(window).scrollTop() + $(window).height() == $(document).height()) {
                $scope.getNext();
            }
        });
    });
</script>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы скрываете это через id, что так неправильно, id всегда должен быть уникальным.

Вот быстрое решение

Попробуй это:

добавьте эти стили, потому что мы будем использовать угловую директиву ng-class

.show {
    pointer-events: auto !important;
    opacity: 1 !important;
}
.hide{
    opacity: 0 !important; 
    pointer-events: none !important;
}

в вашем html файле используйте ng-init для создания переменной области вашего ng-repeat который обрабатывает отображение / скрытие, я не удалял id's, это ваша работа по его очистке

<div id = "outer-wrapper" class = "outer-wrapper">          
        <div id = "inner-wrapper" class = "inner-wrapper" ng-repeat = "x in insideData" ng-init = "show = false">
            <img ng-if = "x.service=='Instagram'||(x.service=='Twitter' && x.mediaType=='image')" ng-src='{{x.thumbnails[0].url}}'>
            <div class = "outer-caption" ng-if = "x.service=='Twitter'&& x.mediaType!='image'">
                <div class = "inner-caption">{{x.caption}}</div>
            </div>
            <div class = "item-overlay-color"></div>
            <!--We do this because we don't have reference of show in the controller-->
            <div class = "item-overlay-text" ng-click = "show = true">VIEW</div>
            <!--In here we handle the show and hide-->
          <div id = "page-overlay" class = "page-overlay" ng-class = "{'show': show, 'hide': !show}">
             <div class = "text">
                 <img ng-src='{{x.mainImage.url}}'>
                 <span class = "close" ng-click = "show = false">X</span>
                 </div>
             </div>
        </div>
    </div>

Другие вопросы по теме