角度异步搜索过滤器 - 已收到的预期数组:{0}

时间:2015-10-28 03:12:50

标签: angularjs filter

尝试为friends数组启用搜索输入,但是这些朋友正被异步抓取,所以我得到了这个错误Expected数组但收到了:{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>

这里有一些相关的控制器代码 friends数组是一个对象数组

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 :(得分:0)

想通了,索引跟踪干扰了过滤器。我把它拿出来工作