2015-10-28 25 views
0

尝试启用朋友数组的搜索输入,但是这些朋友被抓取异步,所以我得到这个错误预期的数组,但收到:{0} - ---因为过滤器加载时数组是空的......反正有这个问题吗?角度异步搜索过滤器 - 预期的数组,但接收到:{0}

<span class="friendHeaders">Online Friends</span> 
    <input type="text" width="10%" class="friendSearch" placeholder="Search friends" ng-model="searchText"/> 

    <div class="friendScroll" scroll-glue-top> 
    <ul class="friendList"> 
     <li ng-if='friend.online' ng-repeat="friend in friends track by $index | orderBy:'name' | filter:searchText" ng-click='startChat(friend)'> 
     <div ng-class='(friend.username === activeFriend.username) ? "activeFriendPanel" : ""' class='panel panel-default friendPanel'> 
      <span ng-if="friend.service === 'Locket'" class="glyphicon glyphicon-lock" aria-hidden="true"></span> 
      <span ng-if="friend.service === 'Facebook'" aria-hidden="true"><img class='icon' src='../../facebook.png'/></span> 
      <span ng-if="friend.service !== 'Locket' && friend.service !== 'Facebook'" class='friendService'>{{friend.service}}</span> 
      <span class='friendName'>{{friend.name}}</span> 
      <span class='friendArrow'><span class="glyphicon glyphicon-chevron-right vertical-center" aria-hidden="true"></span></span> 
      <div class="unreadMessage" ng-if="friend.unreadMessage"> 
      New message 
      </div> 
     </div> 
     </li> 
    </ul> 
    </div> 

这里是一些相关的控制器代码 朋友阵列的是对象的数组

var keyResponseTimeout = 15000; 
angular.module('Locket.chat', ['luegg.directives', 'ngAnimate']) 

.controller('chatController', function ($scope, authFactory, $stateParams, socket, encryptionFactory, $timeout) { 
    console.log('chat'); 
    authFactory.signedin().then(function(resp){ 
    if (resp.auth === 'OK') { 
     socket.connect(); 

     var keyring = encryptionFactory.generateKeyPair(); 
     var publicKey; 
     // send public key to friends on login 
     keyring.then(function (keypair) { 
     publicKey = keypair.pubkey; 
     socket.emit('sendPGP', keypair.pubkey); 
     }); 

     $scope.currentUser = $stateParams.username || resp.username; 
     $scope.friends = []; 
     $scope.sentRequest = false; 

     function createFriendObj(username, online, name, service) { 
     return { 
      service: service || 'Locket', 
      username: username, 
      name: name || (username + ' daawwggg'), 
      unreadMessage: false, 
      online: online || false, 
      key: null, 
      messages: [], 
      unsentMessages: [], // added this in for revoke and show decrypted message for sender 
      unsentFBMessages: [], // Follows same convention. Will not work for messages from prev session 
      sentKey: false 
     }; 
     } 

     // Listen for events from our extension 
     window.addEventListener('message', function(event) { 
     if (event.source != window) 
      return; 

     // Recieve a facebook friends list 
     if (event.data.type && (event.data.type === 'facebookFriendsList')) { 
      for (var i = 0; i < event.data.text.length; i++) { 
      var friend = event.data.text[i]; 
      var friendObj = createFriendObj(friend.username, true, friend.name, "Facebook"); 
      $scope.friends.push(friendObj); 
      } 
      // After receiving a facebook friends list, begin monitoring the facebook DOM 
      window.postMessage({ type: 'scanFacebookDOM', text: ''}, '*'); 
     } 
+1

你能提供你的控制器的代码吗? –

+0

@AnikIslamAbhi是对的,如果你可以请提供与'html'一起出现的'angular'代码将会很好。 – charliebrownie

+0

https://docs.angularjs.org/error/filter/notarray;你可以在视图中显示朋友并查看其值

{{friends}}

回答

0

我想你应该保持它track by $index出于性能原因。我读到它应该只是移动到功能的末尾

friend in friends | orderBy:'name' | filter:searchText track by $index