2015-10-10 3 views
1

Хорошо, я создал ng-repeat, чтобы получить всех пользователей, созданных $ http.get. Этот запрос получает обновления каждые 5 секунд с использованием интервала $ и отображает отдельные пользовательские данные при щелчке по вызову $ scope.goInfo (данные). Этот $ scope.goInfo (данные) используется на всей странице для отображения пользовательских данных, но создается ng-repeat (но не всегда используется в ng-repeat). Как я могу получить эти данные obj, созданные обновлением ng-repeat каждые 5 секунд за пределами ng-repeat? Я не могу обернуть $ scope.goInfo() в интервале $.просмотр объектов ng-repeat, используемых за пределами ng-repeat

Пример

//CONTROLLER// 
function liveFeed(){ 
    $http.get('some URL').then(function (user) { 
     $scope.user = user.data; 
     console.log('user data is', $scope.user); 
    }); 
} 

//Updates get req every five secs// 
$interval(liveFeed, 5000);    

//gets data obj from ng-repeat, needs to be updated every 5 secs.// 
$scope.goInfo = function (data) {  
    $scope.name = data.name; 
    $scope.beats = data.beats; 
} 

HTML

<table> 
    <th>First Name: John</th> 
    <th>Last Name:</th> 
     <tr ng-repeat="data in user" ng-click = "goInfo(data)"> 
     <td>{{data.name}}<td> 
     </tr> 
</table> 

<span>{{beats}}</span><!--needs to update every 5 secs, outside of ng-repeat and be binded to the user that was clicked on--> 
+0

Может быть, тот же самый запрос HTTP, но на этот раз вместо того, чтобы использовать директиву ngRepeat, используйте angular.forEach для итерации через response.data и найти имя и удары. –

ответ

0

Вам необходимо сбросить выбранный объект после получения новых данных. В принципе, вам просто нужно найти соответствующие записи в новом массиве объектов и снова установить его как выбранный.

Что-то вроде этого следует сделать трюк:

function liveFeed() { 
    $http.get('some URL').then(function(user) { 
     $scope.user = user.data; 

     // Find the record that was selected before this update 
     if ($scope.selectedUser) { 
      $scope.selectedUser = $scope.user.filter(function(obj) { 
       return obj.name === $scope.selectedUser.name; // or compare by unique id 
      })[0]; 
     } 
    }); 
} 

// Updates get req every five secs 
$interval(liveFeed, 5000); 

// Gets data obj from ng-repeat, needs to be updated every 5 secs 
$scope.goInfo = function(data) { 
    $scope.selectedUser = data; 
} 

и HTML будет использовать selectedUser:

<table> 
    <tr> 
     <th>First Name: John</th> 
     <th>Beats:</th> 
    </tr> 
    <tr ng-repeat="data in user" ng-click="goInfo(data)"> 
     <td>{{data.name}}<td> 
     <td>{{data.beats}}</td> 
    </tr> 
</table> 

<span>{{selectedUser.beats}}</span> 
+0

Спасибо, я вижу, как это работает, но по какой-то причине {{selectedUser.beats}} до сих пор не обновляется, когда мой бэкэнд изменяется после выбора пользователя. Я делаю что-то неправильно ??? –

 Смежные вопросы

  • Нет связанных вопросов^_^