Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何找到传递到组件的属性?_Javascript_Ember.js_Ember Components - Fatal编程技术网

Javascript 如何找到传递到组件的属性?

Javascript 如何找到传递到组件的属性?,javascript,ember.js,ember-components,Javascript,Ember.js,Ember Components,我在余烬中有一个组件 {{some-setup-section processingOfId=processingOfId savingActivitySetUp=savingActivitySetUp editingActivitySetUp=editingActivitySetUp}} 在我的组件js文件中 didUpdateAttrs() { this.updateDataOnChange(); this._super(...arguments)

我在余烬中有一个组件

 {{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不鼓励像这样传递attr,而且很快就会被去除。有什么办法可以解决这个问题吗


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

没有内置方式

  • 我们必须像下面这样自己做
  • 有关更多信息,请参阅

    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);
      }
    });
    
  • 你可以使用插件
  • 从“ember diff attrs”导入diffAttrs; 导出默认的Ember.Component.extend({ didReceiveAttrs:diffAttrs('email','isAdmin',函数(changedAttrs,…args){ 这个._super(…args); if(changedAttrs&&changedAttrs.email){ 让oldEmail=changedAttrs.email[0], newEmail=changedAttrs.email[1]; //做事 } }) }); 一些简要说明:

    • 提供给diffAttrs的函数钩子将始终被调用,即使跟踪的attr没有更改
    • changedAttrs在第一次调用时将为空
    参考用法

    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]; // Do stuff } }) });