如何使用angularJS中的$ resource从json中检索值

Isr*_*rba 1 javascript angularjs

我如何使用$ resoure从调用中检索值并在JS中使用它,不仅仅在我的数据绑定视图中?

我有这个JSON:

{
    "id": 18,
    "name": "adsfadsf",
    "type_of_dish": "Tacos",
    "cost": "5.95",
    "notes": "bla bla bla",
    "totalrecipes": 1,
    "dish_recipes_attributes": [
        {
            "recipe_id": 28,
            "no_recipe": 1,
            "name": "tacos al pastor piña",
            "cost_portion": "5.95"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在我的JS中:

$scope.dish = Dish.get({id: $routeParams.id});
Run Code Online (Sandbox Code Playgroud)

我需要获得值"totalrecipes",我已经尝试过这个没有成功:

var totalrecipes = $scope.dish.totalrecipes;
console.log(totalrecipes);  //Undefined
console.log($scope.dish); // [object Object]
Run Code Online (Sandbox Code Playgroud)

但在我看来,一切都还可以:

{{dish.totalrecipes}}   // 1, It's OK!
Run Code Online (Sandbox Code Playgroud)

hel*_*ert 5

请记住,资源的操作函数是异步的,只返回一个promise对象.您可以在$ resource$ q文档中阅读.实际上,视图设计为在"履行"承诺后更新自身,这就是视图中显示值的原因.

请考虑以下示例:

$scope.dish = Dish.get({id: 123})
alert($scope.dish.totalrecipes);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,$scope.dish将分配一个promise对象,直到加载实际值(这可能在以后的任何时间点发生,或者根本不发生).

相反,您可以使用回调方法,直接作为函数的参数get,或使用promise API:

$scope.dish = Dish.get({id: 123}, function(dish) {
    alert(dish.totalrecipes);
});
Run Code Online (Sandbox Code Playgroud)

或者:

$scope.dish = Dish.get({id: 123})
$scope.dish.$promise.then(function(dish) {
    alert(dish.totalrecipes);
});
Run Code Online (Sandbox Code Playgroud)