class loginCtrl {
constructor(http) {
[this.http, this.name] = [http, 'login'];
}
login() {
console.log(this.http);
console.log(this.name);
}
}
loginCtrl.$inject = ['http'];
let a = new loginCtrl();
a.login();
Nach einem solchen Aufruf ist http undefiniert, kann aber durch Klicken auf das Ereignis ausgedruckt werden.
Was ist los? Angular wird zum Injizieren von http verwendet.
http-Code lautet wie folgt:
class http {
constructor($http) {
this.$http = $http;
this.options = {
headers: {
'Content-type': 'application/json;charset=utf-8',
'accessToken': 2332
}
}
}
get(data, url, cb) {
let gets = {method: 'GET', params: data, url: url}
Object.assign(gets, this.options)
this.$http(gets).then(function (data) {
console.log('success');
cb(data);
})
}
}
http.$inject = ['$http'];
export default angular.module('http', [])
.service('http', http)
.name;
let a = new loginCtrl(http)
你没有给http到constructor
因为你注入是异步方法,其他是同步方法,同步方法会从上到下执行,但是遇到异步方法的地方会新开一个线程去执行,也就是你注入http的这个方法和你的login方法并行,直接运行,当你的login线程运行完后,http注入这个线程还没来得及返回值,就打印出来了。但是添加了点击事件后,就开了个事件触发线程,当一个事件被触发时该线程会把事件添加到待处理队列的队尾,这样点击后就收到了http注入后返回的值,大概就是这样。