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