0

Angular-Meteor チュートリアルのステップ 9 に従って、Meteor コレクションを使用する Angular ディレクティブを作成しようとしています。

このファイルはルート フォルダーにあります。

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's 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() が返すオブジェクトの配列です。なぜカーソルではないのですか?

4

1 に答える 1

1

そうです、 $meteor.collection はカーソルを返さず、タイプが異なる AngularMeteorCollection の配列を返します: http://angular-meteor.com/api/AngularMeteorCollection

これは、Angular 開発者に簡単に操作できる API を持つ通常の配列を提供したかったためです。

findただし、その配列に関数を追加するのは興味深いアイデアです。その関数を使用して、フィルター処理されたオブジェクトを返したいですか? そのためにフィルターを使用できますが、このオプションも追加できるかもしれません

于 2015-07-19T11:24:01.613 に答える