为什么我的资源无法在我的ng模型上显示?

时间:2014-11-20 07:03:20

标签: angularjs angular-ngmodel ngresource ngroute

在我的项目中,我使用ngRoute将edit.php视图加载到我的索引ng-view

我不知道为什么ngResource结果没有绑定到我的ng模型, 这是我的代码:

使用Javascript:

var app = angular.module('smodule', ['ngRoute','ngResource']);

/* Factory */
app.factory('Stocks', function($resource){

    return $resource('<?=$this->module_url;?>/stocks/:stockId', {stockId:'@stock_id'}, {
        query: {method:'GET', isArray:true},
        get: {method:'GET',isArray:true,  params:{stock_id: '@stock_id'}},
        update: {method:'PUT'}
    });
});

/* Router */
app.config(function($routeProvider) {
    $routeProvider
        .when('/stock',{
            templateUrl: 'edit.php',
            controller: 'stockDetailController'
        })
        .when('/stock/:stockId', {
            templateUrl: 'edit.php',
            controller: 'stockDetailController'
        });
});

/*Controller*/
app.controller('stockDetailController', function($scope, Stocks, $routeParams){
    console.log($routeParams.stockId);
    if ($routeParams.stockId){
        /* Update stock data */
        Stocks.get({stockId:$routeParams.stockId}, function(stock){
            $scope.stock = stock;
            console.log(stock); 
        });

    }
});

/* Bootstrap the module as ng-module */
angular.bootstrap(document, ['smodule']);

edit.php:

<div class="columns medium-8 large-8 ">
    <label>Stock name
       <input type="text" name="stock_name" ng-model="stock.name" />
    </label>
</div>

后端返回以下json

[
  {
    id: "1",
    name: "My stock name"
  }
]

我使用chrome调试器检查ngResource是否返回任何结果,并显示以下内容:

[Resource, $promise: Object, $resolved: true]
  0: id: "1",
     name: "My stock name"
  $promise: Object
  $resolved: truelength: 1

任何人都可以提供帮助? 谢谢。

2 个答案:

答案 0 :(得分:1)

Thx @JBNizet提供结果:

问题是因为我的服务返回一个具有name属性的1个对象的数组。但我使用它就好像它返回了对象本身

只需将工厂更改为:

app.factory('Stocks', function($resource){
return $resource('<?=$this->module_url;?>/stocks/:stockId', {stockId:'@stock_id'}, {
    query: {method:'GET', isArray:true},
    get: {method:'GET', params:{stock_id: '@stock_id'}},
    update: {method:'PUT'}
});

});

并为后端php 返回单个对象结果而不是数组

答案 1 :(得分:-1)

你差不多就像这样使用ng-modal中的股票。

HTML

<div class="columns medium-8 large-8 ">
<label>Stock name
   <input type="text" name="stock_name" ng-model="stock" value="stock.name" />
</label>