Следуя шагу 9 " Угловой метеор", я пытаюсь создать директиву "Угловая", в которой используется коллекция "Метеор".
Этот файл находится в корневой папке:
TicTacToeBoards = new Meteor.Collection("tic_tac_toe_boards");
if (Meteor.isServer) {
Meteor.publish('TicTacToeBoards', function() { return TicTacToeBoards.find(); });
}
Этот файл находится в папке /client:
angular.module('TicTacToe').directive('tictactoegraph', function() {
return {
templateUrl: 'client/graph/tictactoegraph.ng.html',
scope: true,
controller: function($scope, $meteor, Sigma, TicTacToeClass) {
$scope.TicTacToeBoards = false;
$meteor.subscribe('TicTacToeBoards').then(function(subscriptionHandle){
$scope.TicTacToeBoards = $meteor.collection(TicTacToeBoards);
});
},
link: function($scope, element, attrs) {
// TODO: Ask SO if there a better way to wait on the subscription....
$scope.$watch('TicTacToeBoards', function(newValue, oldValue) {
if ($scope.TicTacToeBoards) {
console.log($scope.TicTacToeBoards); // An array of objects.
var nextBoards = $scope.TicTacToeBoards.find({ numberOfMoves: 0 });
}
});
}
}
}
К сожалению, это дает ошибку:
TypeError: $ scope.TicTacToeBoards.find не является функцией
Похоже, что $scope.TicTacToeBoards
не является указателем Mongo, но является массивом объектов, возвращаемых TicTacToeBoards.find(). Почему это не курсор?
Вы правы, $ meteor.collection не возвращает курсор, он возвращает массив типа AngularMeteorCollection, который отличается: http://angular-meteor.com/api/AngularMeteorCollection
Он делает это, потому что мы хотим дать разработчикам Angular регулярный массив, с которым API API будет легко работать.
Это интересная идея добавить функцию find
к этому массиву. Хотите ли вы использовать эту функцию для возврата отфильтрованного объекта? Вы можете использовать фильтры для этого, но, возможно, мы можем добавить и этот вариант