2014-09-24 3 views
0

У меня есть переменная области действия с этой структурой:AngularJS: NgShow Оценка свойств объекта в коллекции

var $scope.messages = [ 
    { 
    id: '1', 
    body: 'Foo', 
    status: 'read' 
    }, 
    { 
    id: '2', 
    body: 'Bar', 
    status: 'read' 
    }, 
    { 
    id: '3', 
    body: 'Hello', 
    status: 'unread' 
    }, 
    { 
    id: '4', 
    body: 'World', 
    status: 'unread' 
    }, 
] 

На макете HTML, я нг-шоу директива, как это:

<div class="loaderContainer" ng-show="isAnyNewMessage() > 0"> 
    You have unread message(s) 
</div> 

function isAnyNewMessage(){ 
    var count = 0; 
    for(var i = 0; i < $scope.messages.length; i++){ 
    if($scope.messages[i].status == 'unread'){ 
     count++; 
    } 
    } 
    return count; 
} 

Я хочу чтобы показать .loaderContainer, если есть сообщение с status: unread. Как достичь правильного состояния ng-show?

Fiddle: http://jsfiddle.net/tdcbqdcg/1/


К сожалению, ребята, что я сделал ошибку.

Функция оценки (isAnyNewMessage) должна быть членом $scope переменных, как это:

$scope.isAnyNewMessage = function() { 
    var count = 0; 
    for (var i = 0; i < $scope.messages.length; i++) { 
     if ($scope.messages[i].status == 'unread') { 
      count++; 
     } 
    } 
    return count; 
}; 
+0

С тех образца у меня есть 2 непрочитанных сообщений, поэтому '' .loaderContainer должно быть показано до –

+0

как вы получите ваши сообщения? от вызова ajax? –

+0

Технически нет, но на самом деле это было похоже на аякс. Предположим, что это было от ajax –

ответ

0
$scope.isAnyNewMessage=function() { 
    var count = 0; 
    for (var i = 0; i < $scope.messages.length; i++) { 
     if ($scope.messages[i].status == 'unread') { 
      count++; 
     } 
    } 
    return count; 
} 
+0

определите свою функцию таким образом .. !! – RootHacker

+0

ой! Я didnt chked ваш обновленный код .. !! так что u уже решил, что здорово .. !! – RootHacker

-1

Если вы хотите, конечно, рабочий ответ, вы должны предоставить JSFiddle или весь ваш контроллер. Но от вашего кода:

ng-show - это переменная true или false. Таким образом, вы можете вызвать свою функцию внутри ng-show, но убедитесь, что вы вернули true или false внутри isAnyNewMessage.

Например:

function isAnyNewMessage(){ 
    var count = 0; 
    for(var i = 0; i < $scope.messages.length; i++){ 
    if($scope.messages[i].status == 'unread'){ 
     count++; 
    } 
    } 
    return count > 0; 
} 

<div class="loaderContainer" ng-show="isAnyNewMessage()"> 
    You have unread message(s) 
</div> 

See the docs for ngShow.

+2

, это в значительной степени то, что он уже делает, перемещение> 0 внутри самой функции не имеет значения. –