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();
這樣呼叫之後http是undefined,但點選事件,也就是可以列印出來。
這是怎麼回事,注入http那裡用的是angular的。
http程式碼如下:
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;
漂亮男人2017-05-19 10:28:27
因為你注入是非同步方法,其他是同步方法,同步方法會從上到下執行,但是遇到非同步方法的地方會新開一個執行緒去執行,也就是你注入http的這個方法和你的login方法並行,直接運行,當你的login線程運行完後,http注入這個線程還沒來得及返回值,就打印出來了。但是添加了點擊事件後,就開了個事件觸發線程,當一個事件被觸發時該線程會把事件加到待處理隊列的隊尾,這樣點擊後就收到了http注入後返回的值,大概就是這樣。