【问题标题】:AngularJS - Deep object' property deletionAngularJS - 深层对象的属性删除
【发布时间】:2013-12-17 01:54:25
【问题描述】:

我知道如何使用 $parse 服务设置对象的“深度”属性,例如在 this post 中。

但是如何删除深层属性?不要将其分配给null

$parse('very.very.deep.property').assign($scope, null);

,但实际上删除它,就像我们在 JavaScript 中那样:

delete $scope.very.very.deep.property;

【问题讨论】:

  • 当然delete $parse('very.very.deep.property') 应该可以工作
  • @charlietfl 不,我认为delete $parse('very.very.deep.property').assign($scope) 会起作用,但它只会将property 设置为undefinedjsfiddle.net/cherniv/2Evxq
  • 所以我很好奇为什么你不能使用delete $scope.very.very.deep.property;,因为那确实留下了deep作为空对象而hasOwnProperty('property')是假的
  • @charlietfl 因为这部分:very.very.deep.property 作为来自服务器的字符串来到我这里.. 最后它被转换为 XML 节点并且是一个大型 XML 结构的一部分
  • 好的...那么您是否必须递归循环遍历 xml 的深层节点?如果是这样,而循环通过 mabe 可以继续添加 [nodeName] 然后 [nodeName][childNodeName] 到每个级别的范围?

标签: javascript angularjs object angularjs-scope angularjs-service


【解决方案1】:

恐怕没有您正在寻找的 Angular 服务/功能。但是您仍然可以实现以下内容来满足您的要求:

function Ctrl($scope,$parse){
  var path = 'very.very.deep.property';
  var partials = path.split('.');
  var deepKey = partials.pop(); //Extract the key name from your path
  var deepPath = partials.join('.'); //Build the parent's path
  var deep = $parse(deepPath);
  var prop = $parse(path);
  prop.assign($scope, "I'm so deep");
  delete deep($scope)[deepKey]; //Evaluate the deep path against your scope and delete the key
  console.log(deepKey, $scope.very.very.deep)
}

提琴可用here。希望这会派上用场。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2020-10-30
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多