搜尋

首頁  >  問答  >  主體

javascript - es6 參數注入問題

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;
为情所困为情所困2817 天前463

全部回覆(2)我來回復

  • 大家讲道理

    大家讲道理2017-05-19 10:28:27

    let a = new loginCtrl(http)

    你沒有給http到constructor

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-19 10:28:27

    因為你注入是非同步方法,其他是同步方法,同步方法會從上到下執行,但是遇到非同步方法的地方會新開一個執行緒去執行,也就是你注入http的這個方法和你的login方法並行,直接運行,當你的login線程運行完後,http注入這個線程還沒來得及返回值,就打印出來了。但是添加了點擊事件後,就開了個事件觸發線程,當一個事件被觸發時該線程會把事件加到待處理隊列的隊尾,這樣點擊後就收到了http注入後返回的值,大概就是這樣。

    回覆
    0
  • 取消回覆