2016-06-04 35 views
5

Sto lavorando a un progetto angolare e utilizzo Firebase e si sta verificando un errore con ReferenceError: Firebase is not defined, ma non riesco a capire perché.Firebase non è definito?

enter image description here

questo è il mio 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> 

miei 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); 
}]); 

miei app.js

'use strict'; 

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

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

e la mia 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', /\\/\\/@@[email protected]@[\\s\\S]*\\/\\/@@[email protected]@/, '//@@[email protected]@\\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//@@[email protected]@', 'app/index-async.html');\"" 
    } 
} 

Nel file package.json il firebase assegnato "*", non so se può farlo? Tutto il resto sembra buono ...

firebase from console

questo è il file 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" 
    } 
} 

se ci potrebbe essere necessario dare Firebase?

+0

Ci sono altri errori sulla console? In particolare, il 'firebase.js' dei componenti del bower è stato caricato? Puoi accedere all'oggetto 'Firebase' dalla console? Sembra che tu stia usando 'bower' come gestore delle dipendenze e potrebbe essere necessario eseguire' bower install'. L'altra opzione è quella di passare a 'npm' (e' node_modules' da 'bower_components') ed eseguire' npm install' con il tuo dato 'package.json'. –

+0

nessun altro errore ed è possibile accedere a Firebase dalla console, non so quale potrebbe essere il problema ... – sanja

+0

C'è qualcosa nel tuo 'index.html' che può includere il file' contacts.js' _before_ 'firebase .js' è caricato? Inoltre, sebbene sia possibile accedere all'oggetto 'firebase', è possibile accedere anche al costruttore' Firebase' sulla console? –

risposta

1

"firebase": "*" nel vostro package.json installerà l'ultima Firebase ^3.1.0 che non è compatibile con Firebase 2.4.2.

La nuova documentazione è in here

Per includere e configurare Firebase nel vostro index.html:

<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> 

È possibile generare automaticamente la configurazione sopra https://console.firebase.google.com/ con la creazione di un nuovo progetto.

+0

e poi? Come si arriva a 'new Firebase()'? non è ancora definito –

+0

E quindi non è necessario 'new Firebase()'. È possibile ottenere un riferimento con 'firebase.database(). Ref()' – idan

4

avuto lo stesso problema .. l'esperienza terribile ..

Alla fine, ha trovato questo: https://firebase.google.com/support/guides/firebase-web

enter image description here

+0

Ho questo problema particolare e sto usando il metodo descritto qui, ma con lo stesso errore, quindi sembra che ci possa essere una causa sottostante alternativa. –

2

Come altri hanno detto, che stai ricevendo l'ultima versione di Firebase (3 e in alto) che non funziona con il costruttore Firebase docs here. Lo hai capito perché nel tuo package.json hai aggiunto firebase: "*"

Dovresti inizializzare come altri suggeriscono e prima che venga eseguito qualsiasi lavoro con Firebase. Questo potrebbe essere in qualche luogo globale, o in qualche blocco di configurazione (angolare). Dopo l'inizializzazione si può ottenere un riferimento a un database utilizzando

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

Con la nuova versione Firebase, è necessario utilizzare una versione compatibile con AngularFire, quindi è necessario che sia superiore al 2 (versioning confusione, lo so), di cui è possibile trovare la documentazione nel loro GitHub page.

Non vedere AngularFire a tutti nella vostra package.json né nella vostra bower.json ma se si sta lavorando con 3.xx Firebase allora avrete bisogno AngularFire 2.xx

0
  1. Vai al progetto Firebase/console dell'app. Firebase app console
  2. Fare clic su "Aggiungi al tuo Firebase web app"
  3. Poi vi verrà dato alcuni script. Firebase initialization script Aggiungi quelli allo script del progetto prima di utilizzare il Firebase.

Questo è tutto.

0

Una delle seguenti configurazioni può essere d'aiuto.

1) È possibile includere quanto segue nel tag script di index.html

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

2) oppure è possibile includere quanto segue in app.module.ts

import * come firebase da "firebase";

La seconda sintassi è migliore in quanto non è difficile codificare le informazioni sulla versione.