Firebase未定义?

问题描述 投票:6回答:6

我正在开发一个Angular项目并使用Firebase,并且它与ReferenceError: Firebase is not defined错误,但我不知道为什么。

enter image description here

这是我的index.html

<!DOCTYPE html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>My Contacts App</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="bower_components/foundation/css/foundation.css">
  <link rel="stylesheet" href="app.css">
</head>
<body>
  <div class="container">
    <div class="row">
      <div class="large-12 columns">
        <h1>myContacts</h1>
        <hr>
      </div>
    </div>
    <div ng-view></div>
  </div>
  <script src="bower_components/jquery/dist/jquery.js"></script>
  <script src="bower_components/angular/angular.js"></script>
  <script src="bower_components/angular-route/angular-route.js"></script>
  <script src="bower_components/firebase/firebase.js"></script>
  <script src="bower_components/angularfire/dist/angularfire.js"></script>
  <script src="bower_components/foundation/js/foundation.js"></script>
  <script src="app.js"></script>
  <script src="contacts/contacts.js"></script>
</body>
</html>

我的contact.js

'use strict';

angular.module('myContacts.contacts', ['ngRoute', 'firebase'])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/contacts', {
    templateUrl: 'contacts/contacts.html',
    controller: 'ContactsCtrl'
  });
}])

.controller('ContactsCtrl', ['$scope', '$firebaseArray', function($scope, $firebaseArray) {
  var ref = new Firebase('https://<my_project_name>.firebaseio.com/contacts');

  $scope.contacts = $firebaseArray(ref);
  console.log($scope.contacts);
}]);

我的app.js

'use strict';

angular.module('myContacts', [
  'ngRoute',
  'firebase',
  'myContacts.contacts'
]).
config(['$routeProvider', function($routeProvider) {

  $routeProvider.otherwise({redirectTo: '/contacts'});
}]);

和我的package.json

{
  "name": "angular-seed",
  "private": true,
  "version": "0.0.0",
  "description": "A starter project for AngularJS",
  "repository": "https://github.com/angular/angular-seed",
  "license": "MIT",
  "devDependencies": {
    "bower": "^1.7.7",
    "http-server": "^0.9.0",
    "jasmine-core": "^2.4.1",
    "karma": "^0.13.22",
    "karma-chrome-launcher": "^0.2.3",
    "karma-firefox-launcher": "^0.1.7",
    "karma-jasmine": "^0.3.8",
    "karma-junit-reporter": "^0.4.1",
    "protractor": "^3.2.2",
    "shelljs": "^0.6.0",
    "firebase": "*"
  },
  "scripts": {
    "postinstall": "bower install",

    "prestart": "npm install",
    "start": "http-server -a localhost -p 8000 -c-1 ./app",

    "pretest": "npm install",
    "test": "karma start karma.conf.js",
    "test-single-run": "karma start karma.conf.js --single-run",

    "preupdate-webdriver": "npm install",
    "update-webdriver": "webdriver-manager update",

    "preprotractor": "npm run update-webdriver",
    "protractor": "protractor e2e-tests/protractor.conf.js",

    "update-index-async": "node -e \"require('shelljs/global'); sed('-i', /\\/\\/@@NG_LOADER_START@@[\\s\\S]*\\/\\/@@NG_LOADER_END@@/, '//@@NG_LOADER_START@@\\n' + sed(/sourceMappingURL=angular-loader.min.js.map/,'sourceMappingURL=bower_components/angular-loader/angular-loader.min.js.map','app/bower_components/angular-loader/angular-loader.min.js') + '\\n//@@NG_LOADER_END@@', 'app/index-async.html');\""
  }
}

在package.json文件中,我为firebase分配了“ *”,我不知道它是否可以做到?其他一切看起来都不错...

firebase from console

这是bower.json文件

{
  "name": "angular-seed",
  "description": "A starter project for AngularJS",
  "version": "0.0.0",
  "homepage": "https://github.com/angular/angular-seed",
  "license": "MIT",
  "private": true,
  "dependencies": {
    "angular": "~1.5.0",
    "angular-route": "~1.5.0",
    "angular-loader": "~1.5.0",
    "angular-mocks": "~1.5.0",
    "html5-boilerplate": "^5.3.0"
  }
}

是否可能需要提供Firebase?

javascript angularjs firebase firebase-realtime-database
6个回答
5
投票

有同样的问题..糟糕的经历..

最终,找到了这个:https://firebase.google.com/support/guides/firebase-web

enter image description here


2
投票

正如其他人所提到的,您将获得Firebase的最新版本(3及更高版本),该版本不适用于Firebase构造函数docs here。之所以得到它,是因为在package.json中添加了firebase: "*"

您应按照他人的建议进行初始化,并完成与Firebase的任何工作。这可以是全局某个位置,也可以是某个配置块(角度)。初始化之后,您可以使用

获得数据库引用。
var rootRef = firebase.database().ref();

使用新的Firebase版本,您需要使用兼容的AngularFire版本,因此您需要使其高于2(我知道这是令人困惑的版本),您可以在其GitHub page中找到相关文档。

package.jsonbower.json都没有看到AngularFire,但是如果您使用的是Firebase 3.x.x,则需要AngularFire 2.x.x


1
投票

"firebase": "*"中的[package.json将安装与Firebase ^3.1.0不兼容的最新Firebase 2.4.2

新文档位于here

要在index.html中包括和配置firebase:

 <script src="https://www.gstatic.com/firebasejs/3.1.0/firebase.js"></script>


  <script>
    // Initialize Firebase
    // TODO: Replace with your project's customized code snippet
    var config = {
        apiKey: "your apiKey from firebase website",
        authDomain: "projectId.firebaseapp.com",
        databaseURL: "https://databaseName.firebaseio.com",
        storageBucket: "bucket.appspot.com",
      };
        firebase.initializeApp(config);

        var rootRef = firebase.database().ref();

</script>

您可以通过创建新项目在https://console.firebase.google.com/中自动生成上面的配置。


0
投票

以下任一配置均可为您提供帮助。

1)您可以在index.html的脚本标记中包括以下内容:>

src =“ https://www.gstatic.com/firebasejs/3.1.0/firebase.js”

2),或者您可以在app.module.ts中包括以下内容>

从“ firebase”导入*作为firebase;

第二种语法更好,因为您不对任何版本信息进行硬编码。

对于托管项目,要注意的是,本地脚本文件是在Firebase之前加载的。为了防止这种情况,只需将它们“延迟”加载,如下所示:

<script defer src="app.js"></script>

[post感谢Paul De Jong

  1. 转到您的Firebase项目/应用程序控制台。Firebase app console
  • 单击“将Firebase添加到您的Web应用程序”
  • 然后您将获得一些脚本。Firebase initialization script在使用Firebase之前,将它们添加到您的项目脚本中。
  • 就是这样。


    0
    投票

    对于托管项目,要注意的是,本地脚本文件是在Firebase之前加载的。为了防止这种情况,只需将它们“延迟”加载,如下所示:


    -1
    投票
    1. 转到您的Firebase项目/应用程序控制台。Firebase app console
    最新问题
    © www.soinside.com 2019 - 2024. All rights reserved.