如何从ng-repeat中的索引长度获取值

时间:2016-03-14 16:22:43

标签: angularjs ng-repeat

我构建聊天应用程序,可以使用ng-repeat显示朋友列表中的所有朋友。这是代码:

<div class="scrollable">
  <div class="scrollable-content">

    <div class="list-group">
      <div class="list-group-item">
        <h5>Welcome <b>{{  datauser['data']['nama'] }}</b></h5>
        <input type="search" class="form-control app-search" placeholder="Search.." data-ng-model="search" />
        <div class="list-group-item media" href="#"  ng-repeat="friend in datauser['data']['friends'] | filter : {nama : search}"  data-ng-click="chatWith(friend.userid , friend.nama)" data-ng-class="(friend['ischat'] ? 'blokchat' :'')">
            <div class="pull-left">
                <i class="fa fa-user chat-user-avatar"></i>
            </div>
            <div class="media-body" >
                <h5 class="media-heading">{{friend.nama}} <span class="badge bg-danger" data-ng-if="friend['ischat']">*</span></h5>
            </div>
        </div>
    </div>
  </div>
</div>

ng-repeat="friend in datauser['data']['friends'] | filter : {nama : search}"是显示所有朋友,新朋友将在此索引的底部。当用户有新朋友时,此索引将始终加起来。每个用户都有不同的朋友总数,因此索引的长度并不准确,这取决于用户拥有多少朋友。 我的问题是,如何从此索引的长度中获取值?因为此值将在我的语音识别中使用,如下所示:

$scope.recog = function() {
    var recognition = new SpeechRecognition();
    recognition.onresult = function(event) {
    var msg = 'Sorry, there is no such a command like that';
    var result = event.results[0][0].transcript;
        switch(result){
        case 'chat with friend number [i]':
        $scope.chatWith(friend.userid , friend.nama);
        break;
        default:
        navigator.notification.alert(msg, '', 'Undefined Command!','ok');
        break;

    };
    $scope.$apply()
    };
    recognition.start();
  };

所以,我将使用'与朋友号[i]'聊天作为命令,'i'这里是ng-repeat中索引的总长度,'i'是从0到长度-1。我该怎么做?

3 个答案:

答案 0 :(得分:0)

如果您希望迭代项目的索引使用$index。如果您的意思是集合的总长度使用collection.length

答案 1 :(得分:0)

看起来这里有一点点扭曲。您正在根据输入过滤数组,这意味着,朋友的数量/索引可以根据输入字符串进行更改。假设这是预期的功能,您所要做的就是,  1)再次在控制器上应用过滤器     语法为$filter('filter')(array, expression, comparator)文档here

switch(result){
        case 'chat with friend number [i]':
        // Apply filter here
        var friends = $filter('filter')(datauser['data']['friends'], expression, comparator)
        // if friends.length < i -- cannot chat
        // else friend = friends[i-1]
        $scope.chatWith(friend.userid , friend.nama);
        break;
        default:
        navigator.notification.alert(msg, '', 'Undefined Command!','ok');
        break;

    };

2)使用if-else检查命令限制中的朋友数量是否合适 3)如果它在极限,一切都好。 4)否则,“只有3个朋友。所以你不能和4号聊天。”

我无法添加一个plunker,因为我可能无法完全解决您的问题,因为部分代码可用。

干杯。

答案 2 :(得分:0)

这是我的猜测代码:

$scope.recog = function() {
    var recognition = new SpeechRecognition();
    recognition.onresult = function(event) {
    var msg = 'Sorry, there is no such a command like that';
    var filteredElements = ($filter('filter')(datauser['data']['friends'], {nama : search}));
    var friendelement = filteredElements[$index];
    var result = event.results[0][0].transcript;
        switch(result){
        case 'login':
        $scope.loginFn();
            break;
        case 'sign up':
        $location.path('/register');
            break;
        case 'register':
        $scope.registerFn();
            break;
        case 'cancel':
        $scope.cancelregisterFn();
            break;
        case 'chat with friend number ' + friendelement:
        $scope.chatWith(friend.userid , friend.nama);
            break;
        case 'go to home':
        $location.path('/home');
            break;
        case 'go to add friend':
        $location.path('/addfriend');
            break;
        case 'go to friend request':
        $location.path('/friendrequest');
            break;
        case 'go to pending request':
        $location.path('/penddingrequest');
            break;
        case 'add':
        $scope.addfriends();
            break;
        case 'send':
        $scope.sendMessage();
            break;
        default:
        navigator.notification.alert(msg, '', 'Undefined Command!','ok');
        break;

    };
    $scope.$apply()
    };
    recognition.start();
  };

实际上在我的语音识别中还有其他命令。但是在我添加var filteredElements = ($filter('filter')(datauser['data']['friends'], {nama : search})); var friendelement = filteredElements[$index];case 'chat with friend number ' + friendelement: $scope.chatWith(friend.userid , friend.nama); break;之后,我的语音识别并未捕获任何列出的命令。我不知道哪里错了。