私ははUserTokenが定義されていないAngular.js 1.6.5のangle-ui-router 0.4.1.3で同じファイルに別々に保持されている場合、コールバック関数はスコープを変更しますか?
としてエラーを受け取りますが、私は自分のアプリケーションのindex.jsに初期化さ工場のような、
app.factory('userToken', function(){ return { foo : function() { var authToken = "poop" return authToken } } }) app.run(['$rootScope', '$state', 'userToken', main]) function main ($rootScope, $state, userToken) { console.log(userToken.foo()) $rootScope.$on('$stateChangeStart', isAuth) } function isAuth (event, toState, toParams, fromState, fromParams) { console.log("%%%%%%%%%%%%%", userToken.foo()) /* UserToken not defined */ }
を持っています。
完全に理解できます。だから私は、isAuth関数パラメータのようなではUserToken、
function isAuth (event, toState, toParams, fromState, fromParams, userToken) {
console.log("%%%%%%%%%%%%%", userToken.foo())
}
を定義しかし、これを実行した後、私は
が未定義のFOO()を得ることができないというエラーを取得します。
この混乱の末、コールバックパラメータを$ rootscopeのすぐ隣に追加しました。イベントに&、
function main ($rootScope, $state, userToken) {
console.log(userToken.foo())
$rootScope.$on('$stateChangeStart', function (event,
toState,toParams,fromState, fromParams /* Removed userToken */) {
console.log("%%%%%%%%%%%%%", userToken.foo())
})
}
とコンソール
うんちで印刷得たものと思います。
%%%%%%%うんち
私が直接、コールバックにそれを追加する場合にのみ私の質問は、なぜそれが印刷したのか?なぜ私はその名前で関数を呼び出す前に、別のままにしている間にisAuth?
userTokenが範囲外であったため、定義されていない以前にエラーが発生しましたが、今は問題なく動作しました。
これは、実行時にuserTokenが注入され、メイン関数内でそれを保持していても、isAuthコールバックにのみアクセスできることを意味します。 –
はい、それはあなたがコントローラ、ディレクティブ、別の工場にそれを注入すると、それにアクセスすることもできます –