0

私の角度コントローラーは次のようになります。

angular.module("campos").controller("HomeCtrl", ['$scope', '$meteor', '$rootScope', '$state', '$modal',
    function ($scope, $meteor, $rootScope, $state, $modal) {
    // $scope.users = $meteor.collection(Meteor.users, false).subscribe('users');

    $meteor.autorun($scope, function () {
        $scope.$meteorSubscribe('myOrgnization', 'crown').then(function () {
                $scope.organization.forEach(function (org) {
                    console.log(org._id);
                });
            },
            function (error) {
                console.log(error);
            });
    });

    $scope.organization = $meteor.collection(function(){
        return Organizations.find({});
    });
}

]);

サーバーコードは次のようになります。

Meteor.publish('myOrgnization', function(org){
    return Organizations.find({
        'code' : org
    });
});

クライアント コントローラーは正常に終了しました。コンソールからレコード ID を適切に取得できます。ただし、例外がスローされました。

 TypeError: undefined is not a function
    at http://localhost:8026/packages/urigo_angular.js?de756130fe1ce5aaa41d3967997c1b2090bcdd1b:390:12
    at Array.forEach (native)
    at Function._.each._.forEach (http://localhost:8026/packages/underscore.js?46eaedbdeb6e71c82af1b16f51c7da4127d6f285:149:11)
    at diffArray (http://localhost:8026/packages/urigo_angular.js?de756130fe1ce5aaa41d3967997c1b2090bcdd1b:388:5)
    at updateCollection (http://localhost:8026/packages/urigo_angular.js?de756130fe1ce5aaa41d3967997c1b2090bcdd1b:1310:3)
    at http://localhost:8026/packages/urigo_angular.js?de756130fe1ce5aaa41d3967997c1b2090bcdd1b:1154:11
    at http://localhost:8026/packages/angular_angular.js?feeaf4750c9fd3ceafa9f712f99a21ee6fef9b41:17819:31
    at completeOutstandingRequest (http://localhost:8026/packages/angular_angular.js?feeaf4750c9fd3ceafa9f712f99a21ee6fef9b41:5529:10)
    at http://localhost:8026/packages/angular_angular.js?feeaf4750c9fd3ceafa9f712f99a21ee6fef9b41:5806:7
home.ng.js:8 dPmZoCeJ9YbKxKA4u

angular defer から来ているようですが、サブスクライブ構文に正しく従っていると思いますか? $meter.subscribe を使用するように変更しても、同じ例外がスローされます。

どんな助けでも大歓迎です。

前もって感謝します。

4

1 に答える 1

0

promise が返された後、 $scope コレクションを割り当てる必要があります。

    $scope.$meteorSubscribe('myOrgnization', 'crown').then(function () {
        $scope.organization = $scope.$meteorCollection(function(){
            return Organizations.find({});
        });
    });

パブリッシュ引数にオブジェクトを渡すこともお勧めします。

$scope.$meteorSubscribe('myOrginization', {arg1: 'crown'}).then(...)

もちろん、サーバー上では次のようになります。

Meteor.publish('myOrgnization', function(org){
    return Organizations.find({
        'code' : org.arg1
    });
});
于 2015-10-27T22:14:34.923 に答える