如何在Angular $ scope上定义隐藏属性

时间:2013-10-03 22:47:15

标签: angularjs

考虑:

$scope.taylor = {
    firstName: 'taylor',
    lastName: 'mcintyre',
    order: 22 
}

使用$ resource,我可能想保存它:

people.save($scope.taylor);

但是,我不希望将属性“order”与请求一起发送。

Angular会忽略以'$$'为前缀的属性,因为它有自己的内部用途,但它不会以这种方式为我自己的隐藏属性添加前缀,例如。

$scope.taylor = {
    firstName: 'taylor',
    lastName: 'mcintyre',
    $$order: 22 
}

删除不需要的属性是常识性解决方案,但Angular是否有更好的解决方案呢?

1 个答案:

答案 0 :(得分:3)

我知道您正在寻找排除密钥的“Angular方式”,但angular.copy()似乎不支持这一点。 angular.toJson()文档指出:Properties with leading $ characters will be stripped since angular uses this notation internally.这听起来像使用$应保留为角度,而不是我们在对象中使用。

根据情况,我创建了一个simple CodePen example,显示了使用像UnderscoreJS这样的库可以轻松完成此操作。

我确信有更优雅的方法可以做到这一点,但我的例子确实完成了我所理解的主要目标。

我在我的文件中包含了UnderscoreJS库,并添加了以下代码:

var person = {
  firstName: 'John',
  lastName: 'Smith',
  order: 22,
  excludeKeys: [
    'order',
    'excludeKeys'
  ]
};

var personCopy = _.omit(person, person.excludeKeys);

console.log('person: ', person);
console.log('person copy: ', personCopy);

我希望这很有用。