2017-03-05 78 views
2

我想寫採用了棱角分明2和NPM官方elasticsearch.js客戶端Elasticsearch一個簡單的Web界面數據綁定。角2:使用Elasticsearch客戶

我創建了一個服務是這樣的:

import { Injectable } from '@angular/core'; 
import { Client } from 'elasticsearch'; 

@Injectable() 
export class ElasticsearchService { 

    private _client: Client; 
    constructor() { 
     if (!this._client) { 
      this._connect(); 
     } 
    }; 
    private _connect() { 
     this._client = new Client({ 
      host: 'http://my-elasticsearch-host:9200', 
      log: 'trace' 
     }); 
    }; 
    isAvailable(): PromiseLike<String> { 
     return this._client.ping({ 
      requestTimeout: Infinity 
     }); 
    } 
} 

這似乎很好地工作。記錄顯示我的請求被正確回答。

這裏是我的組件:

import { OnInit, Component } from '@angular/core'; 
import { ElasticsearchService } from './services/elasticsearch.service'; 

@Component({ 
    selector: 'foo', 
    templateUrl: './foo.component.html', 
    providers: [ElasticsearchService] 
}) 
export class TimeLineComponent implements OnInit { 

    private status: String = 'not ok'; 
    constructor(private esService: ElasticsearchService) { } ; 

    ngOnInit(): void { 
     this.showStatus(); 
    } 

    showStatus(): void { 
     this.esService.isAvailable() 
      .then(response => this.status = 'OK'); 
    } 

} 

和這裏的模板:

status:{{status}} 

我不明白爲什麼我的瀏覽器一直顯示 「不正常」。我在這裏錯過了什麼?

+0

沒有你的供應商陣列中添加ElasticsearchService地方? –

+0

它在我的app.module.ts中,並且我嘗試在我的組件中添加「提供程序:[ElasticsearchService]」(請參閱​​編輯) 仍然沒有運氣:( –

+0

您的請求是否實際發出?是否有對請求的響應,或者是有錯誤? – ryanlutgen

回答

2

我覺得視圖不刷新的原因是elasticsearch客戶端使用不是由Zone.js.拿起自己的遞延/承諾實施

我發現了兩個可能的解決方案:

1:Run change detection manually你設置組件變量

後2:更換客戶端的默認延遲方法。幸運的是,它很容易(我偷的想法從elasticsearch.jquery.js

function defer() { 
    let resolve, reject, promise; 

    promise = new Promise((_resolve, _reject) => { 
    resolve = _resolve; 
    reject = _reject; 
    }); 

    return { resolve, reject, promise }; 
} 

this.client = new Client({ 
    host: 'http://my-elasticsearch-host:9200', 
    log: 'trace', 
    defer: defer 
}); 

因爲這是使用標準的承諾類,它是由區正確地拾起。

我仍在測試此爲延遲簡約更換()是否足夠,但可能是因爲它需要額外的方法。如果事情出現,我會發布更新。

+0

是的!謝謝你非常。這解決了我的問題:) –

相關問題