AngularJS - 仅在第一次调用时从webApi调用获取数组的长度

时间:2016-07-28 10:00:50

标签: angularjs asp.net-web-api

我正在尝试显示“显示Y景点X”的文字,其中X是当前显示的数字,Y是存储在数据库中的总数。

我可以使用{{Attractions.length}}轻松获得X - 但我仍然坚持使用Y的最佳方式?

目前我正在通过服务调用获取数据,这只是$http获取一个web api控制器以获取最初的所有数据,然后可以对其进行过滤。

$scope.Attractions = dataService.getAllAttractions();

我想做点什么:

$scope.totalAttractions = dataService.getAllAttractions().length;

所以基本上我的问题是在这种情况下获得totalAttractions的最佳方式是什么?

编辑,我的getAllAttractions数据服务功能:

function getAllAttractions() {

        $http.get("/api/v1/attractions")
            .then(function (response) {
                // Success
                angular.copy(response.data, attractions);
            }, function () {
                // Failure
        });
        return attractions;
    }

1 个答案:

答案 0 :(得分:2)

您正尝试使用attractions返回未定义的getAllAttractions()

$http.get服务是异步的并返回一个promise。您应该返回该承诺而不是attractions

在您当前的代码中,我在控制台上插入了日志显示。

function getAllAttractions() {

        $http.get("/api/v1/attractions")
            .then(function (response) {
                // Success
                console.log("success");
                angular.copy(response.data, attractions);
            }, function () {
                // Failure
                console.log("fail");
        });
        console.log("returned value");
        return attractions;
    }

假设您成功调用了Web服务,控制台可能会显示:

returned value
success

这是因为成功回调是在 后返回attractions时执行的。

你应该这样做:

<强>的DataService

function getAllAttractions() {

        return $http.get("/api/v1/attractions");
    }

<强>控制器

dataService.getAllAttractions()
.then(function (response) {
        // Success
        $scope.attractions = response.data;
        $scope.totalAttractions = $scope.attractions.length;
}, function () {
        // Failure
});