我构建聊天应用程序,可以使用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;
之后,我的语音识别没有捕获任何列出的命令。我不知道哪里错了。