2017-08-04 15 views
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超出了範圍,這就是爲什麼它之前沒有定義它的錯誤,但現在它運行順利,爲什麼這會是?

回答

2

工廠userToken由角度創建並注入main函數。在此功能中,您可以隨時隨地訪問userToken工廠。

在您的第一個示例中isAuth定義在main函數之外,因此不再有權訪問userToken工廠。

在您的工作示例中,該功能與main功能的範圍相同,因此可以訪問main功能的變量。

//This means on run, call the main function and inject $rootScope, 
// $state and userToken 
app.run(['$rootScope', '$state', 'userToken', main]) 

//So teh main function is called and the above items are injected 
function main ($rootScope, $state, userToken) { 
    $rootScope.$on('$stateChangeStart', function (event, 
    toState,toParams,fromState, fromParams) { 
     console.log("%%%%%%%%%%%%%", userToken.foo()) //This references the userToken that was injected into run. 
    }) 
} 
+0

因此,這意味着該userToken將在運行中注入只會給isAuth回調訪問,如果我把它的主要功能裏面,而不是如果我引用它的主要功能? –

+0

是的,這是正確的,你也可以訪問它,如果你注入控制器,指令,另一個工廠 –

相關問題