0

私のプロジェクトでは、ngRoute を使用して edit.php ビューをインデックス ng-view にロードします。

ngResource の結果が ng-model にバインドされない理由がわかりません。ここに私のコードがあります:

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

誰でも助けることができますか?ありがとうございました。

4

2 に答える 2

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の場合、配列ではなく単一のオブジェクト結果を返します

于 2014-11-20T07:49:31.030 に答える
-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>

于 2014-11-20T07:14:10.583 に答える