2015-10-28 4 views
0

Попытка включения поискового ввода для массива друзей, однако этих друзей захватывают async, поэтому я получаю эту ошибку. Ожидаемый массив, но полученный: {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'. – charliebrownie

+0

https://docs.angularjs.org/error/filter/notarray; Вы могли бы показать друг в представлении и видеть свои ценности

{{друзей}}

ответ

0

Фигурные его, след индексом мешает с фильтром. Я взял его и работал

0

Я думаю, что вы должны держать его track by $index по соображениям производительности. Я прочитал, что его следует просто переместить в конец функции

friend in friends | orderBy:'name' | filter:searchText track by $index 
Смежные вопросы