如何在Ember中查找传递给组件的属性是否已更改?

3

我在Ember中有一个组件,例如:

 {{some-setup-section
      processingOfId=processingOfId
      savingActivitySetUp=savingActivitySetUp
      editingActivitySetUp=editingActivitySetUp}}

而在我的组件js文件中

didUpdateAttrs() {
 this.updateDataOnChange();
 this._super(...arguments);}

我使用didUpdateAttrs来查找属性是否已更改。在我的情况下,我需要仅在processingOfId更改时执行函数。是否有像this.attrs('processingOfId').didChanged()这样的方法可以帮助我解决问题?
我尝试过。
didUpdateAttrs({oldAttr, newAttr}) 

并检查是否存在oldAttr.someAttrs !== newAttr.someAttrs的值,但在控制台中,它表示ember不鼓励像这样传递attrs,并且很快就会过时。 有没有办法解决这种情况?

总之,有没有办法在组件中的“didUpdateAttrs”方法中找到更新哪个属性。

1个回答

2

目前没有内置的方法,我们需要像下面这样自己实现:

  1. 像下面这样完成它:

更多信息请参阅此RFC

Ember.Component.extend({
  didUpdateAttrs() {
    let oldCoordinates = this.get('_previousCoordinates');
    let newCoordinates = this.get('coordinates');

    if (oldCoordinates && oldCoordinates !== newCoordinates) {
      this.map.move({ from: oldCoordinates, to: newCoordinates });
    }

    this.set('_previousCoordinates', newCoordinates);
  }
});
  1. 您可以使用插件ember-diff-attrs
    import diffAttrs from 'ember-diff-attrs';
export default Ember.Component.extend({ didReceiveAttrs: diffAttrs('email', 'isAdmin', function(changedAttrs, ...args) { this._super(...args);
if(changedAttrs && changedAttrs.email) { let oldEmail = changedAttrs.email[0], newEmail = changedAttrs.email[1]; // 做一些操作 } }) });

一些快速注意事项:

  • 提供给diffAttrs的函数钩子将始终被调用,即使跟踪的属性未更改。
  • 第一次调用时,changedAttrs将为null。

请参阅addon README以获取用法说明


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接