Ich verwende ngResource, um die Daten von der Serverseite in meine Ansicht zu übernehmen, und ich habe eine benutzerdefinierte Aktion definiert, mit der die Anzahl der Elemente ermittelt wird. Im Code (Controller) sieht dies folgendermaßen aus:

$scope.totalItems = Item.item_count().total

Und meiner Meinung nach:

This customer bought {{totalItems}}

Meiner Ansicht nach erhalte ich nur das This customer bought, ohne dass ein anderer Teil interpoliert wird. Aber auch wenn ich das mache:

console.log(Item.item_count().total)
console.log(Item.item_count())

Ich bekomme das undefined für die erste Anweisung, aber für die zweite bekomme ich Folgendes:

enter image description here

Warum kann ich in der Ansicht nicht auf die Gesamtzahl zugreifen und was kann ich tun, um dies zu beheben?

Update (Servicecode):

app.factory('Item', function($resource) {
  return $resource(
        window.config.API_URL + '/:apiPath/:id', {
            id: '@id',
            apiPath: '@apiPath'
        }, {
            query: {
                method: 'GET',
                params: {
                  apiPath: 'items'
                },
                isArray: true
            },
            item_count: {
                method: 'GET',
                params: {
                  apiPath: 'item_count'
                },
                isArray: false
            }
        }
    );
});
0
Remember_me 17 Aug. 2015 im 19:36

5 Antworten

Beste Antwort

Sie müssen das $promise erhalten und einen Rückruf wie folgt übergeben:

Item.item_count().$promise.then(function(data) {
  $scope.totalItems = data.total;
});

Wenn die Daten vor dem Laden Ihrer Ansicht aufgelöst werden müssen, können Sie sie mit $ stateProvider auflösen. Dies sollte Ihnen eine gute Vorstellung davon geben, wie und welche Auswirkungen die Verwendung hat: http://www.codelord.net/2015/06/02/angularjs-pitfalls-using-ui-routers-resolve/.

4
lintmouse 17 Aug. 2015 im 16:46

Ohne Ihren anderen Code zu sehen, ist meine Vermutung die Zeile $scope.totalItems = Item.item_count().total wird aufgelöst, bevor das Versprechen aufgelöst wird. Diese Linie sollte in gewisser Weise für das Versprechen fangen. Dies ist jedoch nur eine Vermutung, da Sie diesen Code noch nicht veröffentlicht haben.

0
James 17 Aug. 2015 im 16:42

Sieh aus, als würdest du ein Versprechen zurückbekommen. Rufen Sie console.log (Item.item_count () auf. Then (function (data) { console.log (Daten); });

0
Frank Adrian 17 Aug. 2015 im 16:42

Versuchen Sie, das scope. aus Ihrem {{}} in der Ansicht zu entfernen.

This customer bought {{totalItems}}
0
Michael M 17 Aug. 2015 im 16:46

Da Item.item_count() ein Versprechen zurückgibt, müssen Sie warten, bis es gelöst ist, bevor Sie $scope.totalItems festlegen:

Item.item_count().then(function(item_count) {
  $scope.totalItems = item_count.total;
});
0
just95 17 Aug. 2015 im 16:44