javascript - 在 ng-view 中使用 ng-repeat

标签 javascript angularjs angularjs-ng-repeat angular-routing ng-view

我正在尝试在 ng-view 内使用 ng-repeat,但它没有提取数据。我在论坛上读到我可以使用工厂,但我认为使用服务是 Not Acceptable ,因为我的 $scope 的数据使用 $routeParams 来查询其数据。

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; 
};

以及 View :

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

最佳答案

让您的 users 函数返回 promise ,而不是尝试解决它,这最终会得到更容易遵循的代码,并将为 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 中以注入(inject) $q 而不是将其传入。

希望有帮助。

关于javascript - 在 ng-view 中使用 ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33578604/

相关文章:

javascript - JS浏览器事件处理

javascript - 更新 Javascript 对象值给出 null

javascript - 通过 ng-repeat 将 N 个元素排序到列中

javascript - $routeProvider 中的 AngularJS 调用方法

javascript - ng-repeat 第二次运行索引,与 $index 分开

javascript - 在 ng-click 上更改 div 的背景颜色

javascript - Highcharts:如何更改 "overscroll"上的 "afterSetExtremes"参数?

javascript - TD Onclick 的问题

java - Mongodb 未知错误?

javascript - 在某些其他范围对象的 ng-repeat 中使用另一个范围对象值