Передача асинхронно полученных данных в директиву

В настоящее время у меня есть AngularJScontroller это в основном получает некоторыеJSON асинхронно через$http.get() вызов, затем связывание полученных данных с некоторой переменной области видимости.

Возобновленная версияcontroller код:

mapsControllers.controller('interactionsController', ['$http', function($http) {
  var ctrlModel = this;

  $http.get("data/interactionsPages.json").
  success(function(data) {
    ctrlModel.sidebar = {};
    ctrlModel.sidebar.pages = data;
  }).
  error(function() {...});
}]);

Тогда у меня есть обычайdirective который получает те же переменные области видимости черезHTML элемент.

Возобновленная версияdirective код:

mapsDirectives.directive('sidebar', function() {
  return {
    restrict : 'E',
    scope : {
      pages : '@'
    },
    controller : function($scope) {            
      $scope.firstPage = 0;

      $scope.lastPage = $scope.pages.length - 1;

      $scope.activePage = 0;

      //...
    },
    link : function(scope) {
      console.log(scope.pages);
    },
    templateURL : 'sidebar.html'
  }
});

Возобновленная версияHTML:

<body>
  <div ng-controller='interactionsController as interactionsCtrl'>
    <mm-sidebar pages='{{interactionsCtrl.ctrlModel.sidebar.pages}}'>
    </mm-sidebar>
  </div>
</body>

Проблема в том, что$http.get() является асинхронным, директива плохо инициализируется (например:$scope.pages.length - 1 не определено).

Я не смог найти ничего, что решило бы эту проблему для меня, хотя есть некоторые представленные решения, которые, казалось бы, решают проблему. А именно, я пытался наблюдать за переменными, только инициализируя переменные после обнаруженных изменений, как предлагалось во многих других постах. Для тестирования я использовал что-то вроде:

//... inside the directive's return{ }
link: function() {
  scope.$watch('pages', function(pages){
    if(pages)
      console.log(pages);
  });
}

Я проверил это, и функция $ watch не вызывалась более одного раза (зарегистрированное значениеundefined), что, как я полагаю, означает, что он не обнаруживает изменение значения переменной. Однако я подтвердил, что значение менялось.

Итак, в чем здесь проблема?

Ответы на вопрос(0)

Ваш ответ на вопрос