4

連絡先レポートを一覧表示するシンプルなアプリがあり、Mongolabからデータを取得する一覧表示を作成しました。

その上で、送信時にリストに新しい連絡先レポートを作成する入力フォームも作成しました

私がコントローラーで使用する関数は、Angularのサイトの例からモデル化されています:

app.factory('Contact',function($mongolabResource){
    return $mongolabResource('contacts');
});

function ContactCreateCtrl($scope,$location,Contact) {
Contact.save(contact,function(){
        $location.path('/');
    });
};

$ location.path()は、ページをリロードするコールバックです。

データが送信されたとき(.save()が成功したとき)にページをリロードせずにビューがリロードされるように、これを書き直すにはどうすればよいですか?

配列を削除してから再定義しようとしましたが、機能しないようです:

Contact.save(contact,function(){
        delete $scope.contacts;
        $scope.contacts = Contact.query();
    });

これを削除機能にも実装したいと思います。誰かが私にこれを学ぶことができる場所を教えてもらえますか?

助けてくれてありがとう

4

3 に答える 3

9

さて、データベースから値を取得するようにフィドルを更新しました: http://jsfiddle.net/joshdmiller/Y223F/2/

app.controller( 'MainCtrl', function ( $scope,Contact ) {
  $scope.updateContacts = function () {
    Contact.query( function( data ) {
      $scope.contacts = data;
    });
  };

  $scope.save = function( newContact ) {
    Contact.save( newContact, function() {
      $scope.updateContacts();
    });
  };

  // The initial data load
  $scope.updateContacts();  
});

2 つの注意事項:

(1) 新しいレコードが作成されたときに再度呼び出せるように、Mongo クエリを関数に移動しました。

(2) $mongolabResource は、成功時にコールバックが実行されることを期待します。提供していないため、アプリがちらつきました。つまり、クエリを呼び出してからフェッチが完了するまで、リストは空でした。代わりに、新しいデータを取得したときにのみ変更する必要があります。私もそれを変えました。

アイテムを手動で追加するか、データベースから取得するという点では、ベスト プラクティスはユース ケースに基づいており、トレードオフがあります。ただし、このような小さなデータの場合は、DB からフェッチするだけです。

于 2013-01-05T21:15:22.663 に答える
0

これを機能させましたが、スコープで配列にプッシュすることについてまだ確信が持てません。データベースから取得できればより良いでしょう

function ContactCreateCtrl($scope,$location,Contact) {
    Contact.save(contact,function(){
    $scope.contacts.push(contact);
});

また、リンクの目的で、db によって自動的に生成される _id オブジェクトが必要になります。この方法では_idが得られません。洞察はありますか?

于 2013-01-05T21:01:36.947 に答える