ng-repeat检测首次出现的病症

时间:2014-12-16 07:18:30

标签: javascript angularjs angularjs-ng-repeat

对于下面的代码,我想检测这种情况的第一次出现(msg.from_id == myid&& msg.seen == 1)然后忽略其余项目,即使条件满足。

我试过($ first&& msg.from_id == myid&& msg.seen == 1)但该条件可能并不总是适用于第一个索引。

<table class="table table-striped table-hover">
    <tr ng-repeat="msg in messages"  >
        <td ng-class="{'orange': msg.from_id!=myid}" >

            <span class="seen" ng-show="msg.from_id==myid && msg.seen==1">
                   <i class="icon icon-ok border0 font12 green"></i> seen
            </span> 

            <b>{{msg.username}}</span> :</b>
            <span  ng-bind-html-unsafe="msg.message"></span>
        </td>
    </tr>
</table>

实际上我想在这里实现的是显示第一个看到的消息的“看见”跨度(就像在Viber中一样)。

1 个答案:

答案 0 :(得分:1)

编辑:我的错,我改变了答案:

我创建了这个例子,为您提供了一个可能的解决方案;我将ngShow条件更改为ngIf并添加了新条件!isDone。呈现第一个元素后,ngInit会将isDone分配给true,以防止进一步展开

var app = angular.module("app", []);
app.controller("ctrl", function ($scope) {
    $scope.messages = [{
        from_id: 'test',
        seen: 1,
        username: 'username',
        message: 'message1'
    }, {
        from_id: 'test',
        seen: 0,
        username: 'username2',
        message: 'message2'
    }, {
        from_id: 'test2',
        seen: 1,
        username: 'username3',
        message: 'message3'
    }, {
        from_id: 'test2',
        seen: 1,
        username: 'username3',
        message: 'message3'
    }

    ];
    $scope.myid = "test";
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<table ng-app="app" ng-controller="ctrl" class="table table-striped table-hover">
    <tr ng-repeat="msg in messages">
        <td ng-class="{'orange': msg.from_id!=myid}"> <span class="seen" ng-if="msg.from_id==myid && msg.seen==1 && !isDone">
                   <i ng-init="isDone=true" class="icon icon-ok border0 font12 green"></i> seen
            </span>  <b>{{msg.username}} :</b>
 <span ng-bind="msg.message"></span>

        </td>
    </tr>
</table>