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回调访问,如果我把它的主要功能里面,而不是如果我引用它的主要功能? –
是的,这是正确的,你也可以访问它,如果你注入控制器,指令,另一个工厂 –