2013-08-30 32 views
0

我正在通過AngularJs寫博客。我是新來的。 我創建了一個BlogController和BlogData服務。 BlogController使用BlogData。 BlogData使用$ http並從服務器獲取數據。 我的控制器是這樣的;Angularjs獲取指令中的數據

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

blogData這樣的數據服務;

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插件回調運行的是「outside」Angular。換句話說,onPageClick()回調沒有Angular知道,所以即使scope.blogPosts被更新,Angular也不會注意到範圍更新。

因此,修復方法是在scope.blogPosts = posts;之後添加scope.$apply(),以使Angular運行摘要循環,這將導致視圖更新。