angular-meteor でのアプリ開発は初めてで、クライアント側からデータベースを変更するのに苦労しています。angular-meteor チュートリアルのほとんどを成功裏に完了しましたが、新しいプロジェクトを開始し、チュートリアルの概念を適応させようとしているので、問題が発生しています。
問題。 ユーザーがフォームに入力し、[追加] をクリックすると、フォームはデータをデータベースに保存する必要があります。同じページに、すべてのデータベース エントリを表示するリストを含めました (HTML リストの典型的な「要素内の要素」ループ)。ただし、フォームに入力した後に [追加] をクリックすると、新しいエントリがリストに追加されて一瞬表示されなくなります。「すべて削除」ボタンをクリックすると同じ動作が発生し、すべてが一瞬消えてから元に戻ります。保持されるデータは、追加/削除する前にデータベースにあったものです。
トラブルシューティングを試みます。「meteor mongo」でコレクションにアクセスでき、持続する値はコレクションにあります。コマンドラインからコレクションに追加または削除できます(編集:変更はクライアント側に反映されます)。クライアント側で送信されたエントリはデータベースに追加されません。サーバー側の起動関数を使用してデータベースを開始しました。条件はif (Videos.find().count() === 0)
. おそらくデータベースは毎回自分自身を再初期化しているだけだと思いましたが、初期化コードがコメントアウトされても動作は持続します。プロジェクトに自動公開を追加しても問題は解決しません。編集: Google Chrome では、送信前または送信後にコンソールにエラーはありません。
関連コード。このリポジトリを出発点として使用し
/client/views/submit/submit.controller.js
angular.module("app").controller("SubmitCtrl", ['$scope', '$meteor',
function($scope, $meteor){
$scope.videos = $meteor.collection(Videos).subscribe('videos');
}
]);
/client/views/submit/submit.ng.html
<form>
<label>URL</label>
<input ng-model="newVideo.linkurl">
<label>Description</label>
<input ng-model="newVideo.description">
<button ng-click="videos.save(newVideo); newVideo='';">Add</button>
</form>
<ul>
<li ng-repeat="video in videos">
{{video.linkurl}}
<p>{{video.description}}</p>
</li>
</ul>
/model/collections.js
Videos = new Mongo.Collection("videos");
/server/publications/videos.js
Meteor.startup(function () {
if (Videos.find().count() === 0) {
var videos = [
{ 'linkurl': 'https://www.youtube.com/watch?v=O7zewtuUM_0',
'description': '1st video'},
{ 'linkurl': 'https://www.youtube.com/watch?v=KSzuiqVjJg4',
'description': '2nd video'},
];
for (var i = 0; i < videos.length; i++)
Videos.insert(videos[i]);
};
});
Meteor.publish("videos", function () {
return Videos.find();
});
ここで関連性が高いと思われる他のファイルは /client/app.routes.js だけですが、これは非常に長く、ほとんど変更していません (基本的に about ページから submit ページまで)。また、アイテムの削除を担当するコントローラーまたはビューも含めていません。これは冗長に見えるためです。
私の限られた知識に関する限り、すべてが機能しているように見えます。その結果、解決策がおそらく私の顔を見つめているような気がします。この問題をトラブルシューティングするための次のステップについて何か提案はありますか?