2015-12-15 5 views
6

Мне еще предстоит найти приличную документацию, в которой подробно описывается, как перейти от Angular 1.x к Aurelia. До сих пор я видел, как люди подробно описывают, как концепция Angular directive может быть переделана в Aurelia с использованием @customElement. Хорошо, достаточно просто. Но эти примеры всегда, всегда просто издеваются над данными.Угловое обслуживание в Аурелии?

Сказанное: Угловые услуги - это однотонные модули, которые могут быть введены в любой контроллер/директиву/услугу и, как правило, позволяют извлекать данные с сервера (то есть PersonService, OrdersService).

Но как эти data services моделируются в Аурелии? Все ли это класс? Это seems like it.

По сути, я бы увидел несколько примеров кода, hello-world, который эффективно извлекает данные из службы и предоставляет его @customElement. Где идут HTTP-вызовы? Как мы даже делаем HTTP-вызовы? Угловое использование $http, что относительно Aurelia?

EDIT:

Вот простой угловой сервис. Как можно было бы атаковать это в Аурелии?

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

Спасибо, это отлично выглядит. У меня вопрос о 'import' в' fancy-custom-element.js'. Сначала мы импортируем 'MyDataService', затем импортируем' inject'. Кажется немного избыточным, нет? Если я импортирую сервис, скорее всего, я хочу его ввести. Будет ли когда-нибудь время, когда я захочу импортировать сервис, но не вводить его? Попытка подумать о сценарии ... – lux

+0

Хороший вопрос, на практике часто бывает куча импорта, многие из них являются статическими элементами, например «import moment from« moment »;'. Было бы небезопасно предполагать, что весь импорт должен быть введен в конструктор. Особенно, если в одном файле был экспортирован несколько классов. Если бы вы использовали TypeScript, вы могли бы заменить '@inject (MyDataService)' на '@autoInject()', и aurelia обнаружит аргументы конструктора, используя метаданные, испускаемые транспилером типов. –

+0

Спасибо - это имеет смысл, особенно в контексте импорта момента или что-то в этом роде. Еще раз спасибо! – lux

Смежные вопросы