2016-10-17 6 views
0

私は流星の角度のjs ui-router解決を使用して、ユーザーリストから選択した1人のユーザーの情報を読み込もうとしています。ui-routerでのMeteorのコレクションの解決

$stateProvider 
    .state('userprofile', { 
     url: '/user/:userId', 
     cache: false, 
     template: '<user-profile userinfo="$resolve.userinfo"></user-profile>', 
     controller: UserProfile, 
     controllerAs: name, 
     resolve: { 
      userinfo: function($stateParams) { 
       viewedUser = Meteor.users.findOne({ 
        _id: $stateParams.userId 
       }); 

       return viewedUser; 
      }, 
     } 
    }); 

問題は、ユーザーリストから初めて、ユーザープロファイルが正しく表示されることです。ただし、ページのリロードにより、userinfoは未定義になります。 私は2回目からコントローラーが既にロードされているので、解決が完了する前に表示されますか?しばらくは、検索した後

は、私はそれは私が期待通りに、ユーザープロファイルが、私はページを更新するたびに表示された作品$ Q、および$タイムアウト

 resolve: { 
      userinfo: function($stateParams, $q, $timeout) { 
       deferred = $q.defer(); 

       $timeout(function() { 
        deferred.resolve(Meteor.users.findOne({ 
         _id: $stateParams.userId 
        })); 
       }, 1000); 

       return deferred.promise; 
      }, 
     } 

を試してみました。 しかし、遅延を500に下げると、リフレッシュ時には未定義に戻ります。 この場合、なぜ遅延が長く働くのかわかりませんか?

ありがとうございました!ここ

答えて

0

、私が使用コードで

解決:{ あるCurrentUser:($のQ)=> { varは延期= $ q.defer();

Meteor.autorun(function() { 
    if (!Meteor.loggingIn()) { 
     if (Meteor.user() == null) { 
     deferred.reject('AUTH_REQUIRED'); 
     } else { 
     deferred.resolve(Meteor.user()); 
     } 
    } 
    }); 

    return deferred.promise; 
} 

}

これは私を見つけるためにいくつかの時間がかかった@urigoどこかによってチュートリアル、からであるが、それは魔法のように動作します。

このコードはトラップ認証が必要な場合に便利です - あなたは、角使用する場合は、解決

にこのルートを試すことができます

function run($rootScope, $state) { 
    'ngInject'; 

    $rootScope.$on('$stateChangeError', 
    (event, toState, toParams, fromState, fromParams, error) => { 
     console.log("$stateChangeError: "+error); 
     if (error === 'AUTH_REQUIRED') { 
     $state.go('login'); 
     } 
    } 
); 
} 
0

.RUN方法ではトップレベルにそれを置きます-meteor

resolve: { 
    'loginRequired': function ($meteor, $state) { 
         return $meteor.requireUser().then(function (user) { 
           if (user._id) {return true;} 
          }).catch(function() { 
           $state.go('login'); 
           return false; 
          }); 
        } 
    } 
関連する問題