如果只有一个元素,AngularJS ng-repeat不起作用

时间:2014-02-26 20:43:43

标签: javascript angularjs

这是html代码:

<div id="notifications-feed" class="content" data-ng-controller="feedContentCtrl">
    <div data-ng-repeat="entry in cmsData.rss.channel.item">

            <div data-ng-bind-html="entry.description"></div>
    </div>
</div>

以下是从URL中读取的JSON:

{
"rss": 
{
    "channel": 
    {
        "description": "",
        "item": 
        {
            "description": "blah blah blah",
            "link": "http://foo.bar",
            "pubDate": "Friday, February 21, 2014 - 17:52",
            "title": "Server Maintenance"
        },
        "language": "en",
        "link": "http://foo.bar/alerts",
        "title": "<a href=&#039;/news&#039;>News & Updates<\/a>"
    },
}} 

如果有多个“item”元素,这样可以正常工作。但是,在这种情况下,只有一个没有显示出来。如果我只是说:

<div data-ng-bind="cmsData.rss.channel.item.desciption"></div>

然后它出现了。当只有一个时,ng-repeat不起作用吗?

修改:通过将代码更改为:

来修复
<div data-ng-repeat="(items, item) in cmsData.rss.channel">

    <div data-ng-bind-html="item.description"></div>
</div>

3 个答案:

答案 0 :(得分:4)

如评论中所述,ng-repeat你的方式是数组。对对象和属性使用以下语法:

(k, v) in cmsData.rss.channel.item

这将迭代cmsData.rss.channel.item

中的每个键/值对

答案 1 :(得分:1)

原因是因为在JSON对象中,“item”不是数组。

修复:

{
"rss": 
{
    "channel": 
    {
        "description": "",
        "item": 
        [{
            "description": "blah blah blah",
            "link": "http://foo.bar",
            "pubDate": "Friday, February 21, 2014 - 17:52",
            "title": "Server Maintenance"
        }],
        "language": "en",
        "link": "http://foo.bar/alerts",
        "title": "<a href=&#039;/news&#039;>News & Updates<\/a>"
    },
}}  

答案 2 :(得分:0)

您正在引用一个对象而不是一个数组,请检查在ngRepeat参数中使用对象的文档。

http://docs.angularjs.org/api/ng/directive/ngRepeat

您需要data-ng-repeat="(key, value) in cmsData.rss.channel.item

然后你可以使用<div data-ng-bind-html="value"></div>列出所有项目的属性。