2
我有一個工廠在我的應用程序一樣的index.js初始化,如果使用angular-ui-router 0.4.1.3將回調函數單獨保存在Angular.js 1.6.5的相同文件中,回調函數是否會改變範圍?
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 */
}
雖然我收到一個錯誤
沒有定義的userToken。
完全可以理解。所以我定義的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回調訪問,如果我把它的主要功能裏面,而不是如果我引用它的主要功能? –
是的,這是正確的,你也可以訪問它,如果你注入控制器,指令,另一個工廠 –