AngularJS - ng - 如果密钥未知则检查真值

时间:2016-08-29 18:19:25

标签: angularjs

我想在AngularJS中应用ng-if,具体取决于JSON中的任何值是true。 第一级键始终相同,但第二级键始终不同。 (所以我不能ng-if="known_stuff.unpredictable_thing",因为"unpredictable_thing"的名称每次都会有所不同。这是JSON。

{
    "known_stuff":
        {
            "unpredictable_thing":false
        },
    "known_stuff_2":
        {
            "non_predictable_stuff":true
        },
    "known_stuff_3":
        {
            "something_unknown":false
        }
} 

提前致谢!

3 个答案:

答案 0 :(得分:1)

如果要检查提供的json中的任何值是否为真,那么

ng-if="known_stuff.unpredictable_thing == ture || 
        known_stuff_2.non_predictable_stuff == true ||
        known_stuff_3.something_unknown == true"

答案 1 :(得分:1)

控制器:

$scope.check = function(someObject) {
    // return true if some value is true inside the object
    for (var key in someObject) {
        if (someObject[key] === true) {
            return true;
        }
    }
    return false;
};

模板:

ng-if="check(known_stuff)"

ng-show="check(known_stuff)"

如果您的数据是数组,则该函数必须如下所示:

$scope.checkData = function(data) {
    for (var i = 0; i < data.length; i++) {
        for (var key1 in data[i]) {
            // return true if some value is true inside the object
            for (var key in data[i][key1]) {
                if (data[i][key1][key] === true) {
                    return true;
                }
            }
        }
    }
    return false;
};

模板:

ng-if="checkData(data)"

答案 2 :(得分:0)

如果我的问题是正确的,那么你的json将具有相同的第一级键(known_stuff),但在know_stuff内可以有多个具有不同名称的键(如unpredictable_thing这里)

最简单的解决方案是迭代第一级密钥,获得如下所示的密钥值对。

<div ng-repeat = "(key, val) in known_stuff" ng-if="known_stuff[key]">
    //do something --> {{key}} - {{val}}
</div>

支持Plunk - &gt; http://plnkr.co/edit/6hQQAtqRseb1gWvueFKr

----------------------------------------------- UPDATE ---------------------------------------------

为您的数据分配jsonData。

<div ng-repeat= "stuff in jsonData">
  <div ng-repeat = "(key, val) in stuff" ng-if="stuff[key]">
      //do something --> {{key}} - {{val}}
  </div>
</div>

另外,更新了相同的插件。我希望这能回答你的问题。