Angular array布尔值为字符串数组

时间:2016-08-06 18:30:04

标签: angularjs

嘿我试图只显示被检查的“文本”:来自布尔值数组的“true”。所选数据在“监视列表”视图中呈现,然后在单击调查项目时,您将被定向到一个“surveymore”视图,显示了大量数据。它是在“surveymore”中,我想过滤...基本上只渲染“过敏”,而不是{text:“Allergies”,例如:check:true}。

Surveylist观点:

<ion-item  ng-class="" ng-repeat="object in lines"  class="item-thumbnail-left item-icon-right item-text-wrap" href="#/moresurvey/{{object.id}}">

<a><h2>{{object.visafname}}</h2></a>
<h2 >{{object.visalname}}</h2>
<p>{{object.gender}}</p>
   <i class="icon ion-chevron-right icon-accessory"></i>

      </ion-item>

Surveymore观点:

<ion-item class="item more-item">
     <p class="moredetails location"> Ailments: </br> </br>

   {{Details.diagnosed}}</p>

  </ion-item>

范围:

$scope.Diagnosed = [
        { text: "Allergies", checked: true},
        { text: "ADHD", checked: false},
        { text: "Alcohol/Drug Dependence", checked: false},
        { text: "Asthma", checked: false},
        { text: "Autism", checked: false},
        { text: "Cancer", checked: false},
        { text: "Diabetes", checked: false},
        { text: "Eating Disorder", checked: false},
        { text: "Fertility Problems", checked: false},
        { text: "Heart Disease", checked: false},
        { text: "High Cholesterol", checked: false},
        { text: "Menopause", checked: false},
        { text: "Mood Disorders (e.g., anxiety, depression)", checked: false},
        { text: "Obesity", checked: false},
        { text: "Stroke", checked: false},
        { text: "Prefer not to answer", checked: false}

        ];

返回范围如下所示:

$scope.Details.diagnosed = _.filter( $scope.Details.diagnosed, function(object){ 
return object.checked == true;
})

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

如果要检索值为checked === true的对象,可以执行以下操作:

var arrayOfObjs = $scope.Diagnosed.filter(function (value) {
  return value.checked;
});

另外,如果你只想获得文本,你可以这样做:

var arrayOfTexts = $scope.Diagnosed.filter(function(value) {
  return value.checked;
}).map(function(item) {
  return item.text;
});

修改

如果您想在视图中显示它,只需使用原生 filter

<p ng-repeat="d in Diagnosed | filter: { checked: true }" ng-bind="d.text"></p>

答案 1 :(得分:1)

你可以使用ng-if。

  

请注意,使用ngIf删除元素时,其范围将被销毁   并且在恢复元素时创建新范围。

  angular.module('app',[]).controller('ctrl',function($scope){
    $scope.Diagnosed = [
        { text: "Allergies", checked: true},
        { text: "ADHD", checked: false},
        { text: "Alcohol/Drug Dependence", checked: false},
        { text: "Asthma", checked: false},
        { text: "Autism", checked: false},
        { text: "Cancer", checked: false},
        { text: "Diabetes", checked: false},
        { text: "Eating Disorder", checked: false},
        { text: "Fertility Problems", checked: false},
        { text: "Heart Disease", checked: false},
        { text: "High Cholesterol", checked: false},
        { text: "Menopause", checked: false},
        { text: "Mood Disorders (e.g., anxiety, depression)", checked: false},
        { text: "Obesity", checked: false},
        { text: "Stroke", checked: false},
        { text: "Prefer not to answer", checked: false}

        ];
  })
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
</head>
<body ng-app="app" ng-controller="ctrl">
  <div ng-repeat="d in Diagnosed" ng-if="d.checked">{{d.text}}</div>
</body>
</html>