2013-08-30 2 views
0

Я пишу блог AngularJs. Я новичок в этом. Я создаю службу BlogController и BlogData. BlogController использует BlogData. BlogData использует $ http и получает данные с сервера. мой контроллер как это;Angularjs получить данные в директиве

barbarapp.controller('BlogController', function ($scope, blogData) { 
    $scope.blogPosts = blogData.getBlogPosts(0); 
}); 

blogДетальное обслуживание;

barbarapp.factory('blogData', function ($http, $q) { 
    return { 
     getBlogPosts: function (pageNumber) { 
      debugger; 
      var deferred = $q.defer(); 
      $http({ 
       url: 'Blog/GetBlogPosts', 
       method: 'POST', 
       data: { 'pageNumber': pageNumber } 
      }).success(function (response) { 
       deferred.resolve(response.posts); 
      }); 
      return deferred.promise; 
     } 
    }; 
}); 

все хорошо. И я создаю директиву для pageniation (директива использует библиотеку разбиения на jquery). так называемая директива разбиения на страницы;

barbarapp.directive('createPagination', function (blogData, $q) { 
    return function (scope, element) {   
     $(element).pagination({ 
      items: scope.postCount, 
      itemsOnPage: scope.itemsOnPage, 
      cssStyle: "light-theme", 
      onPageClick: function() { 
       var posts = blogData.getBlogPosts(this.currentPage); 
       scope.blogPosts = posts; 
      } 
     }); 
    }; 
}); 

директива отлично работает, но сообщения на onPageClick не определены. почему это не работает?

+3

проблема может быть 'this.currentPage'. Я не вижу, где это –

+0

@baris Где находится код 'onPageClick' ??? – zsong

+0

Я удалил свой ответ о обещаниях, так как ganaraj и Khanh TO указали, что предпосылка ответа была фактически ложной, чтобы избежать путаницы. –

ответ

2

Как указано в комментариях, область применения $ apply() необходима, поскольку обратный вызов плагина jQuery запускается «снаружи» Углового. Другими словами, обратный вызов onPageClick() происходит без использования Angular, поэтому, хотя scope.blogPosts обновляется, Angular не замечает обновление области.

Итак, исправление заключается в том, чтобы добавить scope.$apply() после scope.blogPosts = posts;, чтобы вызвать Угловой запуск цикла дайджеста, что приведет к обновлению представления.

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