如果 Angular.js 1.6.5 和 angular-ui-router 0.4.1.3 分别保存在同一个文件中,回调函数会改变范围吗?
Do callback functions change scope if kept separately in the same file in Angular.js 1.6.5 with angular-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 */
}
尽管我收到一个错误
The userToken is not defined.
完全可以理解。所以我在 isAuth 函数参数 中定义了 UserToken,比如
function isAuth (event, toState, toParams, fromState, fromParams, userToken) {
console.log("%%%%%%%%%%%%%", userToken.foo())
}
但是在这样做之后我得到一个错误说
cannot get foo() of undefined.
所以在那次混乱之后,我直接在 $rootscope.&on 事件旁边添加了回调参数,
function main ($rootScope, $state, userToken) {
console.log(userToken.foo())
$rootScope.$on('$stateChangeStart', function (event,
toState,toParams,fromState, fromParams /* Removed userToken */) {
console.log("%%%%%%%%%%%%%", userToken.foo())
})
}
猜猜控制台中打印了什么
poop.
%%%%%%% poop
我的问题是为什么直接添加到回调中才打印出来?为什么不早点,当我用它的名字 isAuth 调用函数时,它是分开的?
userToken 超出范围,这就是为什么它早些时候给出了未定义错误但现在它 运行 顺利,为什么会这样?
工厂userToken
由angular创建并注入到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.
})
}
我在我的应用程序的 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 */
}
尽管我收到一个错误
The userToken is not defined.
完全可以理解。所以我在 isAuth 函数参数 中定义了 UserToken,比如
function isAuth (event, toState, toParams, fromState, fromParams, userToken) {
console.log("%%%%%%%%%%%%%", userToken.foo())
}
但是在这样做之后我得到一个错误说
cannot get foo() of undefined.
所以在那次混乱之后,我直接在 $rootscope.&on 事件旁边添加了回调参数,
function main ($rootScope, $state, userToken) {
console.log(userToken.foo())
$rootScope.$on('$stateChangeStart', function (event,
toState,toParams,fromState, fromParams /* Removed userToken */) {
console.log("%%%%%%%%%%%%%", userToken.foo())
})
}
猜猜控制台中打印了什么
poop.
%%%%%%% poop
我的问题是为什么直接添加到回调中才打印出来?为什么不早点,当我用它的名字 isAuth 调用函数时,它是分开的?
userToken 超出范围,这就是为什么它早些时候给出了未定义错误但现在它 运行 顺利,为什么会这样?
工厂userToken
由angular创建并注入到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.
})
}