我知道我的标题有点令人困惑,但我想问题就是这样。
我正在尝试调用与调用者在同一个对象上但在回调中的函数。
serv.factory("repo", function(rest, $location){
return {
get: function(repoName, cb){
this.i[repoName].length > 0 ? cb(this.i[repoName]) : rest[repoName].query(cb)
},
i:{
events: rest.events.query(>>>>>>CALL readyCheck()<<<<<),
audiences: rest.audiences.query(>>>>>>CALL readyCheck()<<<<<),
categories: rest.categories.query(>>>>>>CALL readyCheck()<<<<<),
outcomes: rest.outcomes.query(>>>>>>CALL readyCheck()<<<<<),
regions: rest.regions.query(>>>>>>CALL readyCheck()<<<<<),
types: rest.types.query(>>>>>>CALL readyCheck()<<<<<)
},
url:'',
readyCheck: function(){
var ready = true
angular.forEach(this.i, function(value, key){
if( value.length < 2 ) {
ready = false
}
})
if(!ready){
console.log('not ready')
this.url = $location.path() !== '/loading' ? $location.path() : this.url
$location.path('/loading')
} else {
console.log('ready')
$location.path(this.url)
}
}
}
})
当我使用this.readyCheck时,似乎已经失去了它对父对象的引用(get,i,url,readyCheck)
有什么建议吗?
答案 0 :(得分:1)
你试图使用的'this'是一个不同的函数,因此'this'是不同的。 为了能够从就绪检查功能中访问URL属性,将服务存储到变量中以便以后能够访问它。像这样:
var service;
service = {
get: function(repoName, cb){
this.i[repoName].length > 0 ? cb(this.i[repoName]) : rest[repoName].query(cb)
},
i:{
events: rest.events.query(>>>>>>CALL readyCheck()<<<<<),
audiences: rest.audiences.query(>>>>>>CALL readyCheck()<<<<<),
categories: rest.categories.query(>>>>>>CALL readyCheck()<<<<<),
outcomes: rest.outcomes.query(>>>>>>CALL readyCheck()<<<<<),
regions: rest.regions.query(>>>>>>CALL readyCheck()<<<<<),
types: rest.types.query(>>>>>>CALL readyCheck()<<<<<)
},
url:'',
readyCheck: function(){
var ready = true
angular.forEach(this.i, function(value, key){
if( value.length < 2 ) {
ready = false
}
})
if(!ready){
console.log('not ready')
service.url = $location.path() !== '/loading' ? $location.path() : service.url
$location.path('/loading')
} else {
console.log('ready')
$location.path(this.url)
}
}
};