2015-02-23 3 views
0

Мне нужна помощь относительно моего первого проекта AngularJS (после официального учебника). Это началось хорошо, так как я смог контролировать свою форму, отправить мой запрос ajax и отобразить результаты, как я хочу, с разбивкой на страницы ... Разве это не здорово? Но теперь я пытаюсь сделать загрузчик ajax. Я думаю, что было бы возможно использовать директиву ng-show, но я хотел бы сделать это как можно более общим, чтобы я мог повторно использовать его в других проектах.Создать общую директиву загрузчика ajax

Итак, я начал создавать директиву (после этого: Angularjs loading screen on ajax request). Теперь все работает так, как я хочу, за исключением того, что загрузчик ajax никогда не отображается.

Похоже, что моя директива не проверяет параметр загрузки. У меня такое чувство, что я что-то пропустил.

Вот мой код (упрощенно):

(function() { 
var app = angular.module('querygen', []); 

app.controller('QuerygenController',['$http', function($http){ 

    this.loading=false; 

    this.getQueries = function(page){ 
     this.loading = true; 
     querygen = this; 
     $http.post('/action.php', data).success(function(data){ 
      querygen.loading = false; 
     }).error(function(data){ 
      querygen.loading=false; 
      alert('An error occured.'); 
     }); 
    };  

}]); 

app.directive('loading', function() { 
    return { 
    restrict: 'E', 
    replace:true, 
    template: '<div class="loading"><img src="images/loader.gif" alt="Loading..." /></div>', 
    link: function (scope, element, attr) { 
      scope.$watch('loading', function (val) {     
       if (val) 
        element.show(); 
       else 
        element.hide(); 
      }); 
     } 
     }; 
    }); 

})(); 

Мой HTML:

<div ng-controller="QuerygenController as querygenCtrl"> 
    <loading></loading> 
    <div ng-show="!querygenCtrl.loading"> 
     <div ng-repeat="query in querygenCtrl.queries">   
      {{query}} 
     </div> 
    </div> 
</div> 

Кроме того, как только моя проблема решена, если я поставлю директиву в другой модуль, и добавить новый модуль, как зависимость «querygen», будет ли она работать так, как есть?

+0

Я не уверен, что вы используете «это» в своем контроллере. У меня создалось впечатление, что scope. $ Watch следует использовать только для других переменных сферы, но я не могу найти документы для поддержки этого прямо сейчас. Вы пытались сделать «загрузку» переменной области? – cjkenn

ответ

0

Отправляю ответ. MapOfVeins был прав. Обновление this.loading до $scope.loading решило мою проблему. Было что-то, что я пропустил относительно этого/$ -области. Спасибо!

Смежные вопросы