AngularJS + Firebase: Uncaught Document body has not initialized. Wait to initialize Firebase until after the document is ready

StackOverflow https://stackoverflow.com/questions/23195003

  •  06-07-2023
  •  | 
  •  

LIVE DEMO

I would like to use AngularFire to bind $rootScope.demo to the Firebase model.

Here is what I'm trying to do:


<!DOCTYPE html>
<html ng-app="Demo">
<head>
  <meta charset="utf-8">
  <title>Demo</title>

  <script src="//code.angularjs.org/1.3.0-beta.5/angular.js"></script>
  <script src="//code.angularjs.org/1.3.0-beta.5/angular-route.js"></script>
  <script src='//cdn.firebase.com/js/client/1.0.11/firebase.js'></script>
  <script src="//cdn.firebase.com/libs/angularfire/0.7.1/angularfire.min.js"></script>
</head>
<body ng-view>
</body>
</html>

angular.module("Demo", ["ngRoute", "firebase"])
.config(function($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true);

  var resolve = {
    whatever: function ($q, $rootScope, $firebase) {
      var defer = $q.defer();

      // I use a different URL in my app as you might guess
      var demoRef = new Firebase("https://demo.firebaseio.com");

      $firebase(demoRef).$bind($rootScope, "demo").then(function() {
        defer.resolve($rootScope.demo);
      });

      return defer.promise;
    }
  };

  $routeProvider
    .when("/", {
      controller: function($scope) {
        $scope.message = "Hello World!";
      },
      template: "<div>{{ message }}</div>",
      resolve: resolve
    })
    .otherwise({
      redirectTo: "/"
    });
});

Unfortunately, I get the following error:

Uncaught Document body has not initialized. Wait to initialize Firebase until after the document is ready.

Why is that? How would you fix it?


BONUS QUESTION

Ideally, I'd like my Firebase model to live in a service rather than the $rootScope, but I wasn't sure how could I load the Firebase model into the service before the app bootstraps. Any ideas?

有帮助吗?

解决方案

Apparently, moving ng-view from body to an inner element solves the issue:

<body>
  <div ng-view></div>
</body>

DEMO

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top