2
var todoApp = angular.module('TodoApp', ['ngResource']);
todoApp.value('restTodo', 'api/1/todo/:id');

var todoCtrl = todoApp.controller('TodoCtrl', function($scope, $resource, restTodo) {
    $scope.src = $resource(restTodo);
    //add & refresh
    $scope.src.save({ content: 'hello world', done: false });
    $scope.todos = $scope.src.get();
    //OR
    //delete & refresh
    $scope.src.delete({ id: '1' });
    $scope.todos = $scope.src.get();
});

アイテムを追加/削除し、サーバーから todo リストを再度読み取って更新すると。時々このエラーが発生することがわかりました:

System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.

接続文字列に入れることができると誰かが言っMultipleActiveResultSets=true;たが、DELETE が仕事を終える前に GET が明らかにダーティリードをしようとしているので、それは私の問題を隠すだけだと思う​​.

イベントベースのスタイル言語では、DELETEComplete() イベントの後に GET を呼び出すのが自然です。しかし、私は AngularJS を初めて使用します。ここでどのように行われるのかわかりませんか? 助けてください。

4

1 に答える 1

2

私は専門家ではありませんが、読み取りコードを保存の成功コールバックに配置します。このようなもの:

var todoApp = angular.module('TodoApp', ['ngResource']);
todoApp.value('restTodo', 'api/1/todo/:id');

var todoCtrl = todoApp.controller('TodoCtrl', function($scope, $resource, restTodo) {
    $scope.src = $resource(restTodo);
    //add & refresh
    $scope.src.save({ content: 'hello world', done: false }, 
      function(data) {
       $scope.todos = $scope.src.get();
    });
});
于 2012-11-09T07:53:05.903 に答える