Angular 2从对象中删除带有美元符号($)前缀的属性

时间:2016-10-25 14:27:00

标签: angular firebase firebase-realtime-database angularfire angularfire2

考虑以下HTML

<some-component [input]="something" (change)="update(event)"></some-component>

和update()函数

update(event) { 
    console.log(event);
    this.firebaseRef.update(event.$key, event);
  }

此日志:

$exists: function()
$key: "initial"
end: "1.20"
options: Object
start: "0.20"
text: "Dit is een test"

并抛出此错误

  

Firebase.update失败:第一个参数包含属性

中的函数

如果没有Angular附加的美元符号前缀属性,如何从偶数传递数据?我不喜欢在不手动构建新数据对象的情况下这样做。

1 个答案:

答案 0 :(得分:2)

它根本不是一个好的意识形态,但你可以遍历对象属性并过滤那些不以$开头或者也是函数的东西。但我建议你改变事件向处理程序发送数据的方式,这样你就不必对特殊情况进行消毒。

&#13;
&#13;
function getObjectWithoutDollarSignNameAndFunctions(obj){

  var keys = Object.keys(obj).filter(function(key){
    return typeof obj[key] !== 'function' && key.indexOf('$') !== 0;
  });

  return keys.map(function(key){ return obj[key] });    
}

var myObject = {
  $angularKey: 1,
  normalFunction: function(){},
  normalKey: 1,
  normalKey2: {a:12}
};

var myNewObject = getObjectWithoutDollarSignNameAndFunctions(myObject);

console.log(myNewObject);
&#13;
&#13;
&#13;