4

I want to display only one specific object from this JSON array at a a time:

{"records":[
   {"Name":"Pogrom wichra - Ole\u015bnica ","Desc":"Dystans: ok 7km (bieg w stylu poligonu s\u0142u\u017cb specjalnych Polski) Trasa: woda, b\u0142oto, trz\u0119sawisko, g\u0119ste zaro\u015bla, przeszkody naturalne i sztuczne http:www.pogromwichra.pl","Image":"9833.jpg"},
   {"Name":"Bieg herosa ? Pustynia B\u0142\u0119dowska","Desc":"Dystans: opcja do wybrania 9 km, 10kmp\u0142aski lub z przeszkodami, bieg 3 i 9 godzinny Trasa: piasek, piasek, piasek, wzniesienia, przeszkody naturalne i sztuczne www.biegherosa.pl","Image":"6273.jpg"},
   {"Name":"Dycha na 5 ? Pi\u0105tkowice (ko\u0142o Pabianic)","Desc":"Dystans: 10km z niespodziank\u0105 Trasa: nawierzchnia utwardzona ok. 5%, drogi i \u015bcie\u017cki gruntowe 95%. Na trasie do pokonania tor motokrosowy z ostrymi podbiegami i zbiegami po nier\u00f3wnym pod\u0142o\u017cu. Obcinek bardzo trudny technicznie. www.koronapabianice.pl ","Image":"5383.jpg"},
   {"Name":"Bieg rze\u017aniczka (ma\u0142y rze\u017anik) ? Cisna (Bieszczady)","Desc":"Dystans: ok. 27km Trasa: do\u015b\u0107 trudna trasa g\u00f3rska, chocia\u017c przepi\u0119kna i malownicza www.biegrzeznika.pl\/rzezniczek\/","Image":"4640.jpg"},
   {"Name":"Runmageddon ? wiele miast w Polsce","Desc":"Dystans: 6, 12, 21km Trasa: woda, b\u0142oto, ogie\u0144, bagno, przeszkody linowe, sko\u015bne i pionowe \u015bciany, zasieki, okopy www.runmageddon.pl","Image":"7378.jpg"},{"Name":"GROM CHALLENDE - SI\u0141A I HONOR - O\u015brodek Szkolenia Poligonowego GROM Gr","Desc":"Dystans: 20km Trasa: mega wyczerpuj\u0105ca, jest tam wszystko o czym by\u015b pomy\u015bla\u0142 ?. Start tylko zespo\u0142owy (2-osobowy), limit czasowy 5 godzin","Image":"8815.jpg"},
   {"Name":"Biegowa bitwa o \u0141\u00f3d\u017a - \u0141\u00f3d\u017a ","Desc":"Dystans: ok.13km Trasa: woda, b\u0142oto, trz\u0119sawisko, g\u0119ste zaro\u015bla, przeszkody naturalne i sztuczne facebook.com\/bitwaolodz","Image":"7019.jpg"},
   {"Name":"Bieg po wygas\u0142ych wulkanach -Z\u0142otoryja","Desc":"Dystans: 13-14km Trasa: Trasa ekstremalna w terenie zalesionym, b\u0142oto, rowy melioracyjne, trz\u0119sawisko, dno jeziora, przeszkody sztuczne i naturalne, strome podbiegi. www.biegwulkanow.pl","Image":"8465.jpg"}
]}

In my Javascript file, I only put the object on the scope.

$http.get("link/to/my/json/file").success(function (response) {
    $scope.recommends = response.records;
});  

Finally, my HTML looks more or less like this:

<article class="animate-switch" ng-switch-when="polecanybieg">
    <div ng-repeat="recomended in recommends">
        <h1>{{recomended.Name}}</h1><hr>
        <img class="recomendedrunimg" ng-src="../run/{{recomended.Image}}"><br><br>
        <p>{{recomended.Desc}}</p>
    </div>
</article>

All I want to do is to display a single record at time, and then change it by clicking on some button on the page.

2 Answers 2

4

using ng-click, you can call a setter function on the controller to store the selected recomended item in a variable

then using ng-show decide if should display the additional data ( only when the current recomended object equals to the selected one )

http://jsfiddle.net/kcbxg14p/1/

js

angular.module('app', [])
    .controller('TodoCtrl', function ($scope) {
    
    $scope.setSelectedItem = function (item) {
        $scope.selectedItem = item;
    };
        
    $scope.recommends = [{
        "Name": "Pogrom wichra - Ole\u015bnica ",
            "Desc": "Dystans: ok 7km (bieg w stylu poligonu s\u0142u\u017cb specjalnych Polski) Trasa: woda, b\u0142oto, trz\u0119sawisko, g\u0119ste zaro\u015bla, przeszkody naturalne i sztuczne http:www.pogromwichra.pl",
            "Image": "9833.jpg"
    }, 
    ... 
    ];

});

html

<div ng-app="app">
    <div class="container" ng-controller="TodoCtrl">
        <div ng-repeat="recomended in recommends"> 
        <a class="btn btn-primary" ng-click="setSelectedItem(recomended)"> Click to view {{recomended.Name}} </a>

            <div class="well" ng-show="selectedItem == recomended">
                 <h1>{{recomended.Name}}</h1>

                <hr>
                <img class="recomendedrunimg" ng-src="../run/{{recomended.Image}}">
                <br>
                <br>
                <p>{{recomended.Desc}}</p>
            </div>
        </div>
    </div>
</div>
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you very much sir. You really saved me hours of working ;) need to learn a bit more about ng-show. Thanks again
0

If you want to show only one recommend at a time, why looping?

Following the Angular philosophy, you should declare what to show already in the page. In this case

<span>{{recommend}}</span>

where [[Controller]].recommend is a variable exposed from the relative controller, should be enough.

Leaving out the fetching part, assuming [[Controller]].records is already a list of objects, then

<div ng-controller="MainCtrl as Ctrl">
    <span>{{Ctrl.recommend}}<span> - <span ng-click="Ctrl.setNextRecord()">&gt;</span>
</div>

and

angular.module(<your module name here>)
    .controller("MainCtrl", [function () {
        var self = this;
        self.records = [ ... ];
        self.recommend = records[0];
        self.currentIndex = 0;
        self.setNextRecord = function () {
            var nextIndex = currentIndex < self.currentIndex - 2 ? currentIndex + 1 : 0;
            self.currentIndex = nextIndex;
            return self.recommend = records[self.currentIndex];
        };
    }]);

WARNING, I couldn't test the code.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.