首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS:一次在数组中显示一个特定的对象

AngularJS:一次在数组中显示一个特定的对象
EN

Stack Overflow用户
提问于 2015-05-31 20:21:47
回答 2查看 3.1K关注 0票数 4

我想一次只显示这个JSON数组中的一个特定对象:

代码语言:javascript
复制
{"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"}
]}

在Javascript文件中,我只将对象放在作用域中。

代码语言:javascript
复制
$http.get("link/to/my/json/file").success(function (response) {
    $scope.recommends = response.records;
});  

最后,我的HTML看起来或多或少如下所示:

代码语言:javascript
复制
<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>

我想要做的就是同时显示一条记录,然后点击页面上的某个按钮来改变它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-31 20:32:11

使用ng-click,可以调用控制器上的setter函数将选定的recomended项存储在变量中。

然后使用ng-show决定是否应该显示附加数据(仅当当前recomended对象等于所选的数据时)

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

js

代码语言:javascript
复制
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

代码语言:javascript
复制
<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>
票数 4
EN

Stack Overflow用户

发布于 2015-05-31 21:20:43

如果一次只想显示一个recommend,为什么要循环呢?

遵循角度哲学,您应该在页面中声明要显示的内容。在这种情况下

代码语言:javascript
复制
<span>{{recommend}}</span>

如果[[Controller]].recommend是从相关控制器公开的变量,应该就足够了。

忽略取取部分,假设[[Controller]].records已经是对象的列表,那么

代码语言:javascript
复制
<div ng-controller="MainCtrl as Ctrl">
    <span>{{Ctrl.recommend}}<span> - <span ng-click="Ctrl.setNextRecord()">&gt;</span>
</div>

代码语言:javascript
复制
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];
        };
    }]);

警告,我无法测试代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30562262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档