2017-08-04 83 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

是的,这是正确的,你也可以访问它,如果你注入控制器,指令,另一个工厂 –

相关问题