2016-12-22 5 views
4

この単純なWebアプリケーションを作成して、データをfirebaseデータベースに格納しました。問題は、ブラウザでウェブページを開いたときにエラーが発生することです。これは私がsumbitのボタンを上に示したように、それは同じエラーを表示するフィールドにデータがないとの最初の時間を押したときに、私はまたおそらく未処理の拒否 - angularjsでフォームを作成するときのエラー

Possibly unhandled rejection: {} angular.js:14324 

を取得エラーです。その後、もう一度ボタンを押すと、空のフィールドがデータベースに送信されます。私は角度がフィールドが空であることが問題であると思うと思う。何か不足していますか?フィールドにテキストを置くと、データベースにも送信されます。それは空のフィールドだけで問題は解決します。

var app = angular.module("sampleApp", ["firebase"]); 
 
app.controller("SampleCtrl", function($scope, $firebaseArray) { 
 
    var ref = firebase.database().ref().child("messages"); 
 
    $scope.loading = true; 
 
    $firebaseArray(ref).$loaded().then(function(){ 
 
     $scope.loading = false; 
 
     document.getElementById('loader').style.display = 'none'; 
 
    }); 
 
    $scope.messages = $firebaseArray(ref); 
 
    $scope.addMessage = function() { 
 
     $scope.messages.$add({ 
 
      name: $scope.name, 
 
      company: $scope.company, 
 
      reason: $scope.reason, 
 
      wayofcontact: $scope.wayofcontact, 
 
     }); 
 
     $scope.name = ''; 
 
     $scope.company = ''; 
 
     $scope.reason = ''; 
 
     $scope.wayofcontact = ''; 
 
     document.getElementById("name").focus(); 
 
    }; 
 
});
<!DOCTYPE html> 
 
<html ng-app="sampleApp"> 
 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>AngularJS Tutorial</title> 
 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.0/angular.min.js"></script> 
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.5/css/bootstrap.min.css" integrity="sha384-AysaV+vQoT3kOAXZkl02PThvDr8HYKPZhNT5h/CXfBThSRXQ6jW5DO2ekP5ViFdi" crossorigin="anonymous"> 
 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
 
    <style> 
 
    [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { 
 
     display: none !important; 
 
    } 
 
    ul { 
 
     list-style-type: none; 
 
    } 
 
    </style> 
 
</head> 
 
<body ng-controller="SampleCtrl" ng-cloak > 
 
    <div class="container" ng-view> 
 
     <div ng-show="loading"> 
 
      Loading... 
 
     </div> 
 
     <ul class="list-unstyled"> 
 
      <li ng-repeat="message in messages | filter:{name: '!!'}"> 
 
       <h1>{{message.name}}</h1> 
 
       <p> 
 
        Bedrijf: {{message.company}}<br> 
 
        Reden: {{message.reason}}<br> 
 
        Email/telefoon: {{message.wayofcontact}}<br> 
 
       </p> 
 
       <button ng-click="messages.$remove(message)" class="btn btn-danger">Verwijder verzoek</button> 
 
       <br><br> 
 
      </li> 
 
     </ul> 
 
     <form ng-submit="addMessage()" novalidate> 
 
      <div class="row"> 
 
       <div class="col-xs-6 form-group"> 
 
        <input type="text" class="form-control" id="name" ng-model="name" placeholder="Naam" autofocus required/> 
 
       </div> 
 
       <div class="col-xs-6"> 
 
        <input type="text" class="form-control" ng-model="namecolleague" placeholder="Naam collega" required/> 
 
       </div> 
 
       <div class="col-xs-12 form-group"> 
 
        <input type="text" class="form-control" ng-model="company" placeholder="Bedrijf" required/> 
 
       </div> 
 
       <div class="col-xs-12 form-group"> 
 
        <textarea rows="3" type="text" class="form-control" ng-model="reason" placeholder="Reden van bellen" required></textarea> 
 
       </div> 
 
       <div class="col-xs-12 form-group"> 
 
        <input type="text" class="form-control" ng-model="wayofcontact" placeholder="Email of nummer" required/> 
 
       </div> 
 
       <div class="col-xs-12 form-group"> 
 
        <button type="submit" class="btn btn-primary">Add Message</button> 
 
       </div> 
 
      </div> 
 
     </form> 
 
    </div> 
 
    <script type="text/javascript" src="https://www.gstatic.com/firebasejs/3.6.0/firebase.js"></script> 
 
    <script type="text/javascript" src="https://cdn.firebase.com/libs/angularfire/2.1.0/angularfire.min.js"></script> 
 
    <script type="text/javascript" src="scripts/app.js"></script> 
 
    <script> 
 
    // Initialize Firebase 
 
    var config = { 
 
     apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
 
     authDomain: "xxxxxxxxxxxxxxxxxxxx", 
 
     databaseURL: "xxxxxxxxxxxxxxxxxxxxxxxxxxx", 
 
     storageBucket: "xxxxxxxxxxxxxxxx", 
 
     messagingSenderId: "xxxxxxxxxxx" 
 
    }; 
 
    firebase.initializeApp(config); 
 
    </script> 
 
</body> 
 
</html>

答えて

3

このエラーは、$ qを設定するために使用される$ qProviderの一部として追加されました何か

https://docs.angularjs.org/api/ng/provider/$qProvider

ように見えるで検索をしましたエラーはよく知られていないようですが、このプロバイダで設定ブロック内の機能を無効にすることができるようです。

app.config(['$qProvider', function ($qProvider) { 
    $qProvider.errorOnUnhandledRejections(false); 
}]); 

私が追加する唯一の他のものは、ここに失敗する必要がありますが、エラーハンドラが登録されていないという約束を返すものだと思います。

+0

は、これが動作し、メッセージを非表示にします。しかし、私が最初に送信ボタンを押すと、空のフォームはfirebaseデータベースに送信されません。そして、それをもう一度押すと、空のデータをfirebaseデータベースに送信します。私は説明のためにそれをやっているビデオを録画することができました。 – Luukth

0

$loaded()約束チェーンにエラーハンドラをアタッチ:

$firebaseArray(ref).$loaded().then(function(){ 
    $scope.loading = false; 
    document.getElementById('loader').style.display = 'none'; 
}).catch(function (e) { 
    console.log(e); 
    throw e; 
}); 

エラーはその.thenブロックから来ている場合は、コンソールは詳細が表示されます。

AngularJS 1.6.0が.thenブロックのノイズが少なくなりました。残念ながら、いくつかの詳細は失われます。 AngularJS 1.6.1は、より良いエラーメッセージを表示します。

c9dffdeのため、未処理の拒否された約束は$exceptionHandlerに記録されます。通常、これはエラーがコンソールに記録されることを意味しますが、テストでは$exceptionHandlerは(デフォルトで)例外を再スローします。この変更の影響を受けるテスト(たとえば、$exceptionHandlerの特定の注文またはメッセージ数に依存するテスト)は、拒否された約束を処理する必要があります。

-AngularJS Developer Guide - Migrating to v1.6 - $q

も参照してください:

+0

彼らはデータのロードに問題ありません。それは、フォームをデータベースに提出することで何かをしなければなりません。 – Luukth

+0

ブラウザのオープン時とフォームの最初の送信時にエラーメッセージが表示されたとします。これは、$ load chainのエラーの可能性を示します。エラー・キャッチャーを$ addチェーンに追加して、そのチェーンに問題があるかどうかを確認します。より良いエラーメッセージを得るには、Angular 1.5.xに戻してください。 – georgeawg

+0

ワットが最初に失敗する原因になっていたことがわかりました。最初はフィールドが空で、私が悲しいときにはすべてのフィールドを$ 'scope.name =' 'で設定します。今私がスクリプトを実行するとき、私はすべてのフィールドに何も置かないので、データなしで送信します。 – Luukth

関連する問題