Javascript 修改ngResource结果时遇到问题

Javascript 修改ngResource结果时遇到问题,javascript,json,angularjs,ngresource,angularjs-ng-resource,Javascript,Json,Angularjs,Ngresource,Angularjs Ng Resource,我的代码中包含以下内容: function store() { this.products = [ new product("sku001", "Apple", "Tasty stuff", 1.00, "local"), ... ]; 这在展示所有产品时效果良好: <h3>Products</h3> <b>Display products: {{store.products}}</b> <

我的代码中包含以下内容:

function store() {

    this.products = [
        new product("sku001", "Apple", "Tasty stuff", 1.00, "local"),
        ...
    ];
这在展示所有产品时效果良好:

<h3>Products</h3>
<b>Display products: {{store.products}}</b>
<div class="row"> 
    <div ng-repeat="product in store.products">
    <img ng-src="@Url.Content("~/Content/images/products/{{product.sku}}.png")" alt="{{product.name}}"><p></p>
    <p>{{product.description}}</p>
</div>
这似乎也可以正常工作,但值的格式略有不同(大写/不同的键名):

我想使用从API收到的数据创建一个与当前格式匹配的对象数组,但我遇到了一些问题:

function store($resource) {
    var Resource = $resource('/api/products/');

    this.products = Resource.query(function (data) {

        var product = {};
        var productsList = []
        for (i = 0; i < data.length; i++) {

            product = {
                sku: data[i].SKU,
                name: data[i].Name,
                description: data[i].Description,
                price: data[i].Price,
                category: data[i].ProductType
            }
            productsList.push(product);
        }
        return productsList;

    });
app.js

var storeApp = angular.module('AngularStore', ['ngRoute', 'ngResource']).
//route stuff
}]);

storeApp.factory("DataService", function ($resource) {

    var myStore = new store($resource);
    var myCart = new shoppingCart("AngularStore");

    // return data object with store and cart
    return {
        store: myStore,
        cart: myCart
    };
});
函数存储($resource){
var Resource=$Resource('/api/products/');
资源查询(函数(数据){
var乘积={};
var productsList=[]
对于(i=0;i
使用
this.products=Resource.query(函数(数据){…}
时,
this.products
接收
Resource.query()
的返回值,而不是回调函数的返回值

编辑


使用
$scope
,而不是

从Angular 1.2开始,资源支持承诺。但它们没有改变其余行为

要利用$resource的承诺,需要对返回的值使用$promise属性

function store($resource) {
    var Resource = $resource('/api/products/');

    Resource.query().$promise.then(
    //success callback
    function (data) {

        var product = {};
        var productsList = []
        for (i = 0; i < data.length; i++) {

            product = {
                sku: data[i].SKU,
                name: data[i].Name,
                description: data[i].Description,
                price: data[i].Price,
                category: data[i].ProductType
            }
            productsList.push(product);
        }
        this.products = productsList;

    },
    //error call back
    function(){
    });
}
函数存储($resource){
var Resource=$Resource('/api/products/');
Resource.query().$promise.then(
//成功回调
功能(数据){
var乘积={};
var productsList=[]
对于(i=0;i

谢谢

嘿,我尝试了一下,但似乎
this.products
变量从未得到任何值。结果看起来像
this
在回调中意味着另一件事,这就是为什么我避免使用
this
。改用$scope.products。您好-我尝试了一下,得到了一个奇怪的结果,您可以看到变量显示为
{}
ngRepeat
似乎认为有3项..知道可能发生了什么吗?你调试过吗?@Tomcelic你能把console.log(数据)放在success回调中吗?我把
console.log(数据)
放在回调的开始处,得到了这个:
[{“SKU”:“sku001”,“Name”:“Apple”,“ProductType”:“local”,“Description”:“Tasty stuff”,“Allowment”:1073741824,“Price”:1}]
。我还将
控制台.log(productsList);
放在最后,得到:
[{“sku”:“sku001”,“name”:“Apple”,“Description”:“Tasty stuff”,“Price”:1,“category”:“local”}]
谢谢您的帮助。@Tomcelic为什么您的控制器中没有使用$scope?
function storeController($scope, $routeParams, DataService) {
    // get store and cart from service
    $scope.store = DataService.store;
    $scope.cart = DataService.cart;
}
var storeApp = angular.module('AngularStore', ['ngRoute', 'ngResource']).
//route stuff
}]);

storeApp.factory("DataService", function ($resource) {

    var myStore = new store($resource);
    var myCart = new shoppingCart("AngularStore");

    // return data object with store and cart
    return {
        store: myStore,
        cart: myCart
    };
});
function store($resource) {
    var Resource = $resource('/api/products/');

    Resource.query(function (data) {

        var product = {};
        var productsList = []
        for (i = 0; i < data.length; i++) {

            product = {
                sku: data[i].SKU,
                name: data[i].Name,
                description: data[i].Description,
                price: data[i].Price,
                category: data[i].ProductType
            }
            productsList.push(product);
        }
        $scope.products =  productsList;

    });
}
function store($resource) {
    var Resource = $resource('/api/products/');

    Resource.query().$promise.then(
    //success callback
    function (data) {

        var product = {};
        var productsList = []
        for (i = 0; i < data.length; i++) {

            product = {
                sku: data[i].SKU,
                name: data[i].Name,
                description: data[i].Description,
                price: data[i].Price,
                category: data[i].ProductType
            }
            productsList.push(product);
        }
        this.products = productsList;

    },
    //error call back
    function(){
    });
}