AngularJS - 有条件地显示密钥和值(如果存在)

时间:2013-09-29 15:07:05

标签: json angularjs href

这可能有点令人困惑。

基本上,我正在解析显示在不同视图中的多个外部JSON源,具​​体取决于显示的“活动选项卡”。它们都共享相同的部分模板,因此它们看起来完全相同,只是内容不同。

我现在面临的问题是,在某些Feed中,某些键位于数组中,而其他键则不存在。

例如,Feed会解析此类数据:

JSON Feed 1 - 'link'中的一个'属性'

"link":{
  "attributes":{
    "href":"www.link1.com"
  }
}

JSON Feed 2 - “link”中的两个“属性”

"link":[
  {
    "attributes":{
      "href":"www.link1.com"
    }
  },
  {
    "attributes":{
      "href":"www.link2.com"
    }
  }
]

我能够获得价值“www.link1.com”的唯一方法是通过:

对于Feed 1:

<a href="{{item['link']['attributes']['href']}}">link1</a>

对于Feed 2:

<a href="{{item['link'][0]['attributes']['href']}}">link1</a>

我想弄清楚什么是最好的方法:

1)如果link[0]存在 - 显示它,否则如果存在[link],则显示它。

2)或者,如果定位activeTab会更安全吗?例如,如果activeTab = view2 or view4, use [link][0]else if activeTab = view1 or view3 use [link],否则如果我不希望它显示,则不显示任何内容。

另外一个相关问题,如果我在view2上,我只能在该视图上显示[link][0]吗?

任何反馈都将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:0)

在模型控制器中,您可以重建JSON对象以使它们相似。两个Feed中link的值应为数组。

然后在您的模板中,您只需使用ngRepeat从数组中获取项目。

答案 1 :(得分:0)

好的 - 所以我找到了上述问题之一的解决方案:“如何仅在特定视图中显示[link] [0]”

Pro:这是一个简单的代码,取决于正在显示的activeTab / view。

Con(?):因为我真的是AngularJS的新手 - 不确定这是否是最好的解决方案。

基本上: 根据当前显示的ng-view,将显示特定的JSON对象,例如:

<a ng-show="activeTab == 'view1' || activeTab == 'view3'" ng-href="{{item['link'][0]['attributes']['href']}}">
  <h6>Link1 from Feed2</h6>
</a>

虽然主要问题仍未解决:如果存在JSON对象(键,值),而不是另一个,则如何交换/切换JSON对象。我仍然一定想找到一个解决方案,尽管仍然有任何帮助。

请让我知道您的想法,或者我如何改进问题的解决方案!

谢谢! ROC。