2015-11-07 3 views
1

Я пытаюсь использовать ng-repeat внутри ng-view, но он не вытягивает данные. Я читал на форумах, что я мог бы использовать фабрику, но я не думаю, что использование сервиса было бы приемлемым, так как данные для моей $ scope используют $ routeParams для запроса своих данных.Использование ng-repeat внутри ng-view

var myApp = angular.module('myApp', ['ngRoute']); 

myApp.config(['$routeProvider', 
function($routeProvider) { 
    $routeProvider. 
     when('/:name', { 
      templateUrl: 'welcome.html', 
      controller: 'myController' 
     }). 
     otherwise ({ 
     redirectTo: '/' 
    }); 
}]); 


myApp.controller('myController', ['$scope', '$routeParams', '$q', function($scope, $routeParams, $q) { 
    var pls = users($q, $routeParams.name); 
    $scope.sBP = pls; 
}]); 

function users($q, name) { 
var playersDFD = $q.defer(); 
var players = new Array(); 
var GameScore = Parse.Object.extend("GameScore"); 
var query = new Parse.Query(GameScore); 
query.equalTo("playerName", name); 
query.find({ 
    success: function (results) { 
     for (var i in results) { 
      sPlayer = new player(results[i].get("playerName"), results[i].get("score"), results[i].get("cheatMode")); 
      players.push(sPlayer); 
     } 
     playersDFD.resolve(players); 
    }, 
    error: function (error) { 
     alert('error'); 
     playersDFD.reject(data); 
    } 
}); 

return playersDFD.promise 
    .then(function (results) { 
     return results; 
    }) 
    .catch(function (error) { 
     alert(error.message); 
    }); 
}; 

function player(name, score, cheatm){ 
    this.name = name; 
    this.score = score; 
    this.cheatm = cheatm; 
}; 

И вид:

<p ng-repeat="s in sBP"> 
    {{ s.name }} 
</p> 
+0

Я бы проверял, что 'PLS' на самом деле является данными, а не' обещанием'. Вам нужно будет показать, что делает функция 'users', поскольку она кажется глобальной в вашем примере. –

+0

Итак, вы обещаете $ scope ... Promise - это не массив, это '{then: function() {}}' object –

+0

Это может быть полезно: https://github.com/angular/angular .js/issues/3196 –

ответ

1

Пусть ваша users функция возвращает обещание, а не пытаться решить ее, это заканчивается тем, что код, который намного легче следовать и даст потребителям user функция управления, что делать, как только вы получите ответ. Например.

function users($q, name) { 
    var playersDFD = $q.defer(); 
    var players = new Array(); 
    var GameScore = Parse.Object.extend("GameScore"); 
    var query = new Parse.Query(GameScore); 
    query.equalTo("playerName", name); 
    query.find({ 
     success: function (results) { 
      for (var i in results) { 
       sPlayer = new player(results[i].get("playerName"), results[i].get("score"), results[i].get("cheatMode")); 
       players.push(sPlayer); 
      } 
      playersDFD.resolve(players); 
     }, 
     error: function (error) { 
      alert('error'); 
      playersDFD.reject(data); 
     } 
    }); 

    return playersDFD.promise; 
} 

И затем использовать функцию users и обрабатывать then себя.

users($q, $routeParams.name).then(function (response) { 
    $scope.sBP = response; 
}, function (error) { 
    // handle error. 
}); 

Кроме того, я рекомендовал бы вспыхивают users в собственный service впрыснуть $q, а не передавать его в.

Надежда, что помогает.