如何从 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到length-1。我该怎么做?

如果要使用

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

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

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,因为由于可用的部分代码,我可能无法完全解决您的问题。

干杯。

这是我的猜测代码:

$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;之后,我的语音识别没有捕获任何列出的命令。我不知道哪里错了。

最新更新