如何在Ember中更新服务商店中的数据?

weylhg0b  于 2022-11-23  发布在  其他
关注(0)|答案(2)|浏览(148)

我创建了一个服务,并在其中声明了存储:

存储.js:

import Service from '@ember/service';

export default class StoreService extends Service {
  store = {
    lang: 'EN'
  }
}

我还从以下路线进入了商店:

第一个.js:

import Route from '@ember/routing/route';
import { inject } from '@ember/service';

export default Route.extend({
  store: inject(),
  model() {
    console.log(this.store);
    return this.store;
  }
});

和模板.第一.hbs:

<div class="wrapper">
  <h3>First</h3>
  <hr class="gold">
  <p><button type="button">CN</button></p>
  {{model.store.lang}}
</div>

{{outlet}}

请告诉我如何通过按“CN”按钮从路线更改存储中的数据(将lang设置为“CN”)?
祝你好运

lnlaulya

lnlaulya1#

如果你是usign ember〉= 3.16.在你的store.js跟踪状态像

@tracked store = {
  lang: 'EN'
}

然后在first.hbs中添加到按钮
<button {{on "click" this.changeLanguajeToCN}} type="button">CN</button>
最后在控制器中(您需要创建此文件)first.js

import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';

export default class FirstController extends Controller {
  @service store;

  @action changeLanguajeToCN () {
    this.store.store = {...this.store, lang: 'CN'}
  };
}
qxsslcnc

qxsslcnc2#

Pablo's answer上扩展,我建议跟踪lang属性本身,而不是包含它的对象。
此外,我宁愿使用一个不同的名称,因为store是误导,人们会认为你试图使用Ember Data's Store,这是默认情况下可用的Ember项目和作为一个属性的路线。
请参阅此Twiddle以查看实际运行的代码:
https://ember-twiddle.com/02ac6f708d1861816df0f1bce504729a
第一个

相关问题