
要使原始文章中的演示代码达到可以替代HttpClient实现的状态,需要执行几个步骤。
第1步这些行:
users.js
...http.configure(config => { config .useStandardConfiguration() .withbaseUrl('https://api.github.com/');});...应移至
main.js文件:
main.js
export function configure(aurelia) { aurelia.use .standardConfiguration() .developmentLogging(); configureContainer(aurelia.container); // <-------- aurelia.start().then(a => a.setRoot());}function configureContainer(container) { let http = new HttpClient(); http.configure(config => { config .useStandardConfiguration() .withbaseUrl('https://api.github.com/'); }); container.registerInstance(HttpClient, http); // <---- this line ensures everyone that `@inject`s a `HttpClient` instance will get the instance we configured above.}现在我们的users.js文件应如下所示:
users.js
import {inject} from 'aurelia-framework';import {HttpClient} from 'aurelia-fetch-client';@inject(HttpClient)export class Users { heading = 'Github Users'; users = []; constructor(http) { this.http = http; } activate() { return this.http.fetch('users') .then(response => response.json()) .then(users => this.users = users); }}第2步:模拟HttpClient。
user.js模块仅使用
fetch方法,该方法返回
Response具有
json方法的对象。这是一个简单的模拟:
let mockUsers = [...todo: create mock user data...];let httpMock = { fetch: url => Promise.resolve({ json: () => mockUsers })};第三步:重新配置容器以使用http模拟:
在第1步中,我们向模块中添加了一个
configureContainer函数,该函数
main.js在容器中注册了已配置的HttpClient实例。如果我们想使用模拟版本,该
configureContainer函数将更改为:
main.js
...let mockUsers = [...todo: create mock user data...];let httpMock = { fetch: url => Promise.resolve({ json: () => mockUsers })};function configureContainer(container) { container.registerInstance(HttpClient, httpMock);}有关在此处配置容器的更多信息:https : //github.com/aurelia/dependency-
injection/issues/73
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)