2015-12-15 21 views
6

私は、Angular 1.xからAureliaに移行する方法を詳述したまともな文書をまだ見つけていません。これまでのところ、角度directiveの概念が、@customElementを使用してAureliaでどのように再作成できるかを詳しく説明してきました。さて、十分に簡単です。しかし、これらの例は常に、常にちょうどデータを模倣する。前記 アウレリアの角度サービス?

は、角度サービスは、任意のコントローラ/命令/サービスに注入することができるシングルトンであり、典型的には、サーバからのデータの取り込みを可能にする(すなわちPersonServiceOrdersService)。

しかし、これらは、Aureliaでモデル化されたdata servicesはどうですか?すべてが単なるクラスですか?それはseems like itです。

基本的に、サービスからデータを効果的に取り出して@customElementに提供するコードサンプルの一部は、hello-worldです。 HTTPコールはどこに行きますか? HTTPコールをどうやって作るのですか?角度使用$http、Aureliaはどうですか?

EDIT

ここでは簡単な角度サービスです。 Aureliaでこれをどのように攻撃しますか?

app.service('SomeDataService', function() { 
    return { 
     getMyData: function (options) { 
      return $.ajax(options); 
     } 
    } 
}); 
+0

いくつかの角度 'ハローworld'コードは、私は推測する、傷つけることはありません。問題は現在の状態ではあまりにも曖昧に見えます。 – estus

+0

$ .ajaxでデータを取得する簡単な角度サービスを含めるように答えを更新しました。これがアウレリアでどのように模倣されるのだろうかと思います。 – lux

答えて

9

Yep-無地ES6/ES7クラス。データサービスにはフレームワーク侵入はありません。

私-データservice.js

import {HttpClient} from 'aurelia-http-client'; // or 'aurelia-fetch-client' if you want to use fetch 
import {inject} from 'aurelia-framework'; 

@inject(HttpClient) 
export class MyDataService { 
    constructor(http) { 
    this.http = http; 
    } 

    getMyData() { 
    return this.http.get(someUrl); 
    } 
} 

空想-カスタムelement.js

import {MyDataService} from './my-data-service'; 
import {inject} from 'aurelia-framework'; 

@inject(MyDataService) // aurelia's dependency injection container will inject the same MyDataService instance into each instance of FancyCustomElement 
export class FancyCustomElement { 
    data = null; 

    constructor(dataService) { 
    this.dataService = dataService; 
    } 

    // perhaps a button click is bound to this method: 
    loadTheData() { 
    this.dataService.getMyData() 
     .then(data => this.data = data); 
    } 
} 
+0

ありがとう、これは素晴らしいですね。私は 'fancy-custom-element.js'の' import'について質問します。まず、 'MyDataService'をインポートし、次に' inject'をインポートします。ちょっと冗長に見えますか?私がサービスをインポートすると、私はそれを注入する可能性があります。私はサービスをインポートするが、それを注入したくない時がありますか?シナリオを考えようとしています... – lux

+0

良い質問ですが、実際には多くの場合、多くの輸入品があります。多くは静的品目です。例えば、 'moment from' moment ';'です。すべてのインポートをコンストラクタにインジェクトする必要があると仮定することは危険です。特に、同じファイルに複数のクラスエクスポートがあった場合。 TypeScriptを使用する場合は、 '@inject(MyDataService)'を '@autoInject()'に置き換えることができ、aureliaは、typescript transpilerによって生成されたメタデータを使用してコンストラクタの引数を発見します。 –

+0

ありがとうございます。これは意味があります。特に、瞬間などをインポートするという意味では意味があります。再度、感謝します! – lux