我是 angular-meteor 的新手,并试图制作一个类似于 Reddit 的应用程序来进行练习。但我不确定订阅和发布的正确方法是什么。这是我的代码。
angular.module('app')
.config(($stateProvider) ->
$stateProvider
.state('boards-list',
url: '/board'
templateUrl: 'client/boards/boards-list.view.ng.html'
controller: 'BoardsListCtrl'
)
.state('board-detail',
url: '/board/:symbol'
templateUrl: 'client/boards/board-detail.view.ng.html'
controller: 'BoardDetailCtrl'
)
)
我想在上面显示热门帖子/board
,如果您转到特定版块,我想列出版块中的所有帖子。
这是板列表控制器
angular.module('app')
.controller('BoardsListCtrl', ($scope, $meteor, $modal, $log) ->
$meteor.subscribe('getPopularPosts')
$meteor.subscribe('getAllBoards')
$scope.boards = $scope.$meteorCollection(->
Boards.find({})
)
$scope.posts = $scope.$meteorCollection(->
Posts.find({}, _.defaults(DEFAULT_QUERY_OPTIONS, limit: 5))
)
$scope.getHref = (link) -> if link then "http://#{link}" else "#"
$scope.remove = (board) ->
$scope.boards.remove(board)
$scope.open = ->
modalInstance = $modal.open(
templateUrl: 'client/common/modal-new-board.view.ng.html'
controller: 'ModalNewBoardCtrl'
)
)
这是电路板细节控制器
angular.module('app')
.controller('BoardDetailCtrl', ($scope, $stateParams, $meteor, $modal) ->
boardSymbol = $stateParams.symbol
$scope.posts = []
$scope.$meteorSubscribe('getBoardBySymbol', boardSymbol)
$scope.board = $meteor.object(Boards, symbol: boardSymbol, false)
$scope.$meteorSubscribe('getPostsByBoard', boardSymbol)
$scope.posts = $scope.$meteorCollection(->
Posts.find(board: boardSymbol, DEFAULT_QUERY_OPTIONS)
)
$scope.open = ->
modalInstance = $modal.open(
templateUrl: 'client/common/modal-post.view.ng.html'
controller: 'ModalPostCtrl'
resolve:
symbol: -> $scope.board.symbol
)
)
我的问题是,如果我Posts.find({}, DEFAULT_QUERY_OPTIONS)
为 boardDetailCtrl 的 $scope.posts 编写,它实际上会显示所有帖子,就好像路由是/board
状态改变时一样。当您直接访问该路线时,http://localhost:3000/angular
它会获得适当的帖子。不知道为什么会这样,但我将其更改为Posts.find({board: boardSymbol}, DEFAULT_QUERY_OPTIONS)
Then 它按预期工作。
考虑到我只订阅getPostByBoard
是关于只在给定的板上发帖的,我应该只能得到其中的几个。我检查了控制台,Posts.find({}).count()
并且令人惊讶的是它有每一个帖子。
所以我的问题是,即使在我订阅了正确的发布功能后,我是否应该添加查询来查找?还是我在某些时候错了?