【问题标题】:Error: Reference.push failed: first argument contains a function in property - firebase错误:Reference.push 失败:第一个参数包含属性中的函数 - firebase
【发布时间】:2018-02-22 01:50:58
【问题描述】:

我正在尝试将这些值推送到我的 firebase 数据库中。当我尝试推送值时,它在控制台中出现错误(错误:Reference.push 失败:第一个参数包含属性中的函数)。我在firebase上查了一下,发现这是因为一个函数被推送了,但我根本没有推送任何函数。但我有一种感觉,这可能是因为 datetimepicker。需要帮助!

我的 JS

/*global angular*/
var app = angular.module('downtime', ['ngRoute', 'firebase']);

app.config(['$routeProvider', function ($routeProvider) {
    'use strict';
    $routeProvider.when('/downtime', {
        templateUrl: 'downtime/downtime.html',
        controller: 'downtimeCtrl'
    });
}]);

app.controller('downtimeCtrl', ['$scope', '$firebaseObject', '$firebaseArray', function ($scope, $firebaseObject, $firebaseArray) {
    'use strict';

     $scope.allEquipments = [];
     $scope.allSystems = [];

    $scope.manageDowntime = function () {

        var doesExist = false;
        angular.forEach ($scope.data , function (d) {
        angular.forEach (d.equipments, function (e) {
        })
    });
        firebase.database().ref('downtime/' + $scope.equipment + '/downtime').push({
            equipment: $scope.equipment,
            type : $scope.type,
            start: $scope.startDT,
            end: $scope.endDT
        });
};

    var ref = firebase.database().ref();
        var data = ref.child("data");
        var list = $firebaseArray(data);

        list.$loaded().then(function(data) {
            $scope.data = data;
            angular.forEach ($scope.data , function (d) {

              $scope.allSystems.push(d.$id);  

                angular.forEach (d.equipments, function (e) {
                    $scope.allEquipments.push(e.equipment);
                    console.log($scope.allEquipments);
                })
            });
            console.log($scope.data);
        }).catch(function(error) {
            $scope.error = error;
        });

    $('#datetimepicker1').datetimepicker();
    $('#datetimepicker2').datetimepicker();

}]);

app.directive('customzdatetime', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function (scope, element, attrs, ngModelCtrl) {
            element.datetimepicker({
                debug: false,
                format: 'DD-MM-YYYY hh:mm'
            }).on('dp.change', function (e) {
                ngModelCtrl.$setViewValue(e.date);
                scope.$apply();
            });
        }
    };
});

我的 HTML

<div class="page-header">
    <h1>MANAGE DOWNTIME </h1>
</div>
<div data-ng-app="downtime">

<div class="row">
    <div class="col-xs-12">

    <div class="form-group col-xs-6 col-xs-offset-3" id="equipList">
      <label for="selectequ">Select Equipment</label>
       <select class="form-control" id="selectequ" data-ng-model="equipment" 
          >
        <option data-ng-repeat="eq in allEquipments" >{{eq}}</option>
      </select>

        {{equipment}}
    </div>

        <div class="form-group col-xs-6 col-sm-6 col-md-6 col-lg-6 col-xs-offset-3" id="Type">
         <label for="searchType">Search by Type:</label>
         <select class="form-control" id="searchType" data-ng-model="type">
            <option value="" disabled="" selected="" style="display: none">Select type of maintenance</option>
            <option>Corrective Maintenance</option>
            <option>Preventive Maintenance</option>
            <option>Standby</option>
         </select>
      </div>

        {{type}}

    </div>
</div>

<div class="row">

    <div class="form-group col-xs-6 col-xs-offset-3">
      <label for="date">Start of Downtime</label>
<!--        <input type="datetime-local" id="datetimepicker1" class="form-control" placeholder="Day, Month, Year" data-ng-model="startDT"/>-->

                <input type="text" class="form-control" placeholder="Day, Month, Year" data-ng-model="startDT" customzdatetime />
    </div>
        {{startDT}}
    <div class="form-group col-xs-6 col-xs-offset-3">
      <label for="date">End of Downtime</label>
        <input type="text" class="form-control" placeholder="Day, Month, Year" data-ng-model="endDT" customzdatetime/>
        {{endDT}}
    </div>



    </div>

<div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6" id="central">
            <a class="btn cd-add-to-cart cd-add-to-cart:hover cd-add-to-cart:active" role="button" data-ng-click="manageDowntime()">MANAGE   <span class="glyphicon glyphicon-tasks"></span></a>
        </div>
    </div>

</div>

【问题讨论】:

    标签: html angularjs firebase firebase-realtime-database datetimepicker


    【解决方案1】:

    firebase 将不接受日期作为数据类型,尝试将它们转换为字符串或数字,然后尝试将其推送到 firebase。我希望你的问题是 $scope.startDT 因为它包含一些函数,你试图直接使用它,这就是它抛出错误的原因,尝试将它们转换为字符串或数字,然后尝试推送。

    firebase.database().ref('downtime/' + $scope.equipment + '/downtime').push({
            equipment: $scope.equipment,
            type : $scope.type,
            start: new Date($scope.startDT).toLocaleString(),
            end: new Date($scope.endDT).toLocaleString()
            or
            start: new Date($scope.startDT).getTime(), //this will get you unix timestamp as number
            end: new Date($scope.endDT).getTime()
        });
    

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 2018-08-08
      • 2018-10-05
      • 2018-03-01
      • 2020-06-18
      • 2021-03-03
      • 2015-01-31
      • 2021-02-12
      • 1970-01-01
      相关资源
      最近更新 更多