使用angularjs,只有当值不在数组中时才能显示元素?

时间:2014-07-01 23:36:42

标签: javascript angularjs

如果我有一个像这样的数组和json。我省略了一堆不需要解释的内容。

$scope.socialTypes = ["facebook", "pintrest", "twitter", "linkedin"];
$scope.socialJson = [{"type": "facebook"}, {"type": "twitter"}]

我有像这样的HTML

<span class="btn btn-lg btn-squared" ng-repeat="(socialTypeKey, socialTypeValue) in socialTypes">
    <span ng-repeat="socialData in socialJson">
        <a ng-if="socialData.type == socialTypeKey && socialData.golden && socialData.active" class="{{socialTypeValue.aclass}}"><i class="{{socialTypeValue.iclass}}"></i></a>
        <i ng-if="socialData.type == socialTypeKey && socialData.golden && !socialData.active" class="{{socialTypeValue.iclass}}"></i>
        <i ng-hide="!inArray(socialTypeKey, socialJson)" class="{{socialTypeValue.iclass}}"></i>
    </span>
</span>

忽略这里的黄金,活跃和类。我想知道的是,只要社交类型不在socialJson变量中,我就需要显示第3个元素。所以基本上前两个ng-ifs会显示社交是否同时存在,而第三个将显示,如果它不在数组中,就像我嘲笑

1 个答案:

答案 0 :(得分:1)

应该能够在范围中添加isInside函数。用我喜欢的任何实现替换我对underscoreJS的使用。

JS:

$scope.socialTypes = ["facebook", "pintrest", "twitter", "linkedin"];
$scope.socialJson = [{"type": "facebook"}, {"type": "twitter"}]
$scope.isInside = function(array, item) {
  return _.contains(array, item);
}

HTML:

<span class="btn btn-lg btn-squared" ng-repeat="(socialTypeKey, socialTypeValue) in socialTypes">
    <span ng-repeat="socialData in socialJson">
        <a ng-if="socialData.type == socialTypeKey && socialData.golden && socialData.active" class="{{socialTypeValue.aclass}}"><i class="{{socialTypeValue.iclass}}"></i></a>
        <i ng-if="socialData.type == socialTypeKey && socialData.golden && !socialData.active" class="{{socialTypeValue.iclass}}"></i>
        <i ng-hide="!isInside(socialJson, socialTypeKey)" class="{{socialTypeValue.iclass}}"></i>
    </span>
</span>