AngularJS + Firebase: тело необработанного документа не инициализировано. Подождите, чтобы инициализировать Firebase, пока документ не будет готов

РЕАЛЬНАЯ ДЕМО

Я хотел бы использовать AngularFire для привязки $rootScope.demo к модели Firebase.

Вот что я пытаюсь сделать:


<!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: "/"
    });
});

К сожалению, я получаю следующую ошибку:

Неперехваченное тело документа не инициализировано. Подождите, чтобы инициализировать Firebase, пока документ не будет готов.

Почему это? Как бы вы это исправить?


ДОПОЛНИТЕЛЬНЫЙ ВОПРОС

В идеале я хотел бы, чтобы моя модель Firebase находилась в службе, а не в $rootScope, но я не был уверен, как загрузить модель Firebase в службу до загрузки приложения. Любые идеи?


person Misha Moroshko    schedule 21.04.2014    source источник
comment
Привет, Миша, мне непонятно, почему это должно быть в .config(), чтобы использовать его как сервис? Что мешает вам дождаться, пока doc init? Быстрое предположение состоит в том, что ошибка Firebase будет связана с длинным опросом (iframes) и другими причудливыми способами, используемыми для смягчения ошибок/проблем совместимости для веб-сокетов.   -  person Kato    schedule 22.04.2014


Ответы (1)


По-видимому, перемещение ng-view из body во внутренний элемент решает проблему:

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

ДЕМО

person Misha Moroshko    schedule 24.04.2014