javascript - 可能未处理的拒绝——使用 angularjs 创建表单时出错

标签 javascript angularjs validation firebase angularjs-q

我创建了这个简单的 Web 应用程序来将数据放入 firebase 数据库中。问题是当我在浏览器中打开网页时出现错误。这是我得到的错误

Possibly unhandled rejection: {} angular.js:14324

此外,当我在字段中没有数据的情况下第一次按下 sumbit 按钮时,它会显示与上图相同的错误。然后,当我再次按下按钮时,它会将空字段提交给数据库。我认为 Angular 发现字段为空是一个问题。我错过了什么吗?将文本放在字段中效果很好,它也会提交给数据库。只有空字段才是问题所在。

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>

最佳答案

此错误似乎是作为用于配置 $q 的 $qProvider 的一部分添加的内容

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

对错误进行了搜索,因为它看起来并不熟悉,但看起来您可以使用此提供程序在配置 block 中禁用该功能

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

我想唯一要添加的另一件事是这里返回 promise 的东西一定是失败了但没有注册错误处理程序。

关于javascript - 可能未处理的拒绝——使用 angularjs 创建表单时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41290546/

相关文章:

html - AngularJS:如何将默认值设置为 ng-model ="searchText"?

javascript - ngTable 不显示页面链接

java - 如何在 Jenkins 上验证来自 config.jelly 的表单?

backbone.js - 如何使用 Backbone.js 报告无效的表单字段

javascript - 如何使蹦床适应持续传递风格?

javascript - 无法将函数从组件分派(dispatch)到父 Vue

javascript - 将区域元素转换为 div

javascript - 在 angularjs 中使用 office-ui-fabric-js

angular - Angular 6 中的输入验证无法收到错误

javascript - 我可以在 MediaWiki wiki 上使用 jquery.uls 从英语语言名称中获取语言代码吗?