2

私は2つのセクションを持つビュートランザクションを持っています

a.) view-transaction
b.) add-transaction

どちらも次のコントローラーに関連付けられています

function TransactionController($scope, Category, Transaction) {
  $scope.categories = Category.query(function() {
    console.log('all categories - ', $scope.categories.length);
  });

  $scope.transactions = Transaction.query();

  $scope.save = function() {
    var transaction = new Transaction();
    transaction.name = $scope.transaction['name'];
    transaction.debit = $scope.transaction['debit'];
    transaction.date = $scope.transaction['date'];
    transaction.amount = $scope.transaction['amount'];
    transaction.category = $scope.transaction['category'].uuid;

    //noinspection JSUnresolvedFunction
    transaction.$save();
    $scope.transactions.push(transaction);
    console.log('transaction saved successfully', transaction);

  }
}

ここで、Transaction はサービスであり、次のようになります。

angular.module('transactionServices', ['ngResource']).factory('Transaction', function($resource) {
    return $resource('/users/:userId/transactions/:transactionId', {
      // todo: default user for now, change it
      userId: 'bd675d42-aa9b-11e2-9d27-b88d1205c810',
      transactionId: '@uuid'
    });
  });

「トランザクション」タブをクリックすると、ルート #/transactions がアクティブになり、サブビュー a.) と b.) の両方がレンダリングされます。

私が持っている質問は、
- 新しいトランザクションを追加するたびに $scope.transactions を更新する方法はありますか? これはリソースであるため
、手動で $scope.transactions.push(transaction); を実行する必要があります。

4

2 に答える 2

3

私の最初の答えなので、私を気楽に...

Transaction リソースを拡張して、$scope.transactions を更新できます。次のようになります。

angular.module( ..., function($resource) {
    var custom_resource = $resource('/users/:userId/transactions/:transactionId', {
        ...
    });

    custom_resource.prototype.save_and_update = function (transactions) {
        var self = this;
        this.$save(function () {
            transactions.push(self);
        });
    };

    return custom_resource;
});

コントローラーで、次のようにします。

function TransactionController (...) {
    ...
    $scope.save = function () {
        ...
        // In place of: transaction.$save(), do:
        transaction.save_and_update($scope.transactions);
        ...
    }

}

: 作成したオブジェクトが $scope で完全に使用できることを確認する必要があります。このメソッドがコードで失敗した理由を理解するために 30 分を費やしたところ、データベースで ID コードを生成していることがわかりました。その結果、追加された新しいオブジェクトに対する後続のアクションはすべて失敗しました。これは、新しいオブジェクトに ID がないためです!!!

于 2013-05-08T09:00:32.890 に答える