2017-07-29 3 views
1

したがって、ユーザーがこれらの3つのイベントを実行すると、MongoDBで何かを更新したいと思います。私はここでスタックのオーバーフローを検索し、$ stateChangeStartを使用するように指示するいくつかの情報を得ました。私はapp.configが終了した後だから、私は次の行を書いた:ユーザがブラウザの戻るボタン/更新ボタン/閉じるボタンをクリックするたびに、データベース内の何かを更新するには?

.run(['$state', '$cookies', '$rootScope', function($state, $cookies, $rootScope) { 
    $rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) { 
     console.log('e', e); 
     console.log('toState', toState); 
     console.log('toParams', toParams); 
     console.log('fromState', fromState); 
     console.log('fromParams', fromParams); 
    }); 
}]); 

問題は、ブラウザだけで$ rootScopeまで起こっている、ある$に。その後、console.log行は実行されません。誰かが私にこの問題を解決する方法を教えてもらえると本当に感謝しています。この後、私は次のようにDBで何かを変えるの私の問題を解決するために考えていた:

1 - 私はstateNumberまたは何のような状態にいくつかのプロパティを追加します。

2 - (toState.stateNumber == 1)

3場合は、そのプロパティを使用し、そこであろう - そしてtoState.stateNumberが1または2または何であることに応じて、私はデータベースを更新します

これらの問題を解決する方法についてご意見をいただきました。ここで

+0

があなたの代わりに$ stateChangeStartの$ locationChangeSuccessを試してみましたか? –

+0

@pedrumgolrizはい、サー!私は今それを試しています。エラーは発生していません。しかし、console.log($ location.path())を実行すると、何も記録されず、console.log($ rootScope.actualLocation)は未定義を記録します。なぜですか? – psvs

+0

私はそれが.runの中にあるので、それをコントローラに直接固執しようとしています。 –

答えて

0

は、私は自分のアプリケーションでそれをやった方法は次のとおりです。

$rootScope.$on('$locationChangeSuccess', function() { 
    $rootScope.actualLocation = $location.path(); 
}); 

$rootScope.$watch(function() {return $location.path()}, function (newLocation, oldLocation) { 
    if($rootScope.actualLocation === newLocation) { 
      //post to mongo 
    } 
}); 
関連する問題