为什么使用this.get('serviceName')代替this.serviceName?

Per*_*ddy 5 javascript ember.js ecmascript-6 ember-cli

在Ember.JS中,这样做是否有充分的理由:

import Service, { inject } from '@ember/service';

export default Service.extend({
ajax: inject(),
getAll() {
    return this.get('ajax').request(`api/users/`, {
        method: 'GET',
        contentType: 'application/json'
    });
}
});
Run Code Online (Sandbox Code Playgroud)

相对于此?

import Service, { inject } from '@ember/service';

export default Service.extend({
ajax: inject(),
getAll() {
    return this.ajax.request(`api/users/`, {
        method: 'GET',
        contentType: 'application/json'
    });
}
});
Run Code Online (Sandbox Code Playgroud)

第二种方法看起来更干净IMO,但是我想知道是否有充分的功能理由使用.get()而不是直接引用服务。

Nul*_*uli 9

未来是this.whateverProperty

this.get 是在JS缺少很多功能并且很多文档尚未更新的时候实现的。

官方余烬指南已经更新:

https://guides.emberjs.com/release/applications/services/#toc_accessing-services

从Ember 3.1开始,您可以在任何地方使用本机getter。

  • 我要补充一点(通常支持最近2个LTS版本的加载项还没有完全准备好放弃`get`。它们很快就会推出(当3.8成为下一个LTS版本)。 (2认同)