2014-11-25 60 views
5

我有一个范围变量$scope.object = { prop: 12345 }其属性我删除并将它们设置为undefined从范围变量删除属性

<button ng-show="object.prop" ng-click="object.prop = undefined"/> 

是否有从模板内部和外部的控制器,而不是它们的值设置为undefined附加功能删除特性的可能性?

+1

你想从对象中删除特定属性:

但是,如果你想避免不惜一切手段的控制,设置属性未定义可能是一个更好的主意,在这个问题上丹读答案或所有这些? – 2014-11-25 12:11:34

+0

@AmirAl:对象内部的任何特定属性。例如在路径“object.prop.foo [2] .bar”。 – 2014-11-25 12:17:33

+0

@Airir:这不是重复的,因为我们正在谈论AngularJS模板代码而不是Javascript代码。 – 2014-11-25 12:18:20

回答

0

是......也就是说,你可以改变变量的值...也许这将是一个帮助你

试试这个:

<button ng-show="object.prop" ng-click="object.prop = 'undefined'"/> 

,或者你可以清除值...

<button ng-show="object.prop" ng-click="object.prop = ''"/> 

您也可以将该值设置为空

<button ng-show="object.prop" ng-click="object.prop = null"/> 
+1

这会将属性更改为值为“undefined”或“”“''的字符串。所以这不会删除任何东西。 – 2014-11-25 12:52:55

+0

也可以将该值设置为null。

+0

它现在仍然存在。 – 2014-11-25 13:40:07

10

使用以下代码从对象中删除属性

在HTML

<button ng-show="object.prop" ng-click="deleteProperty()" /> 

在控制器

$scope.deleteProperty = function() { 
    delete $scope.object.prop; 
}  
+0

这不是方便的方法,因为如果你想删除对象中的其他属性,你不能用这样的方法。方法只能删除对象中的prop命名属性 – 2014-11-25 13:28:02

+0

由于涉及控制器功能,因此不回答该问题。 – 2014-11-25 13:41:31

0

这里,你可以从范围的对象中删除任何属性名称的方式。这个方法需要使用Underscore.js库。

的index.html

//Underscore.js must be imported 
<script src="path/to/underscore/underscore-min.js"></script> 

//Replace prop with any property name 
<button ng-click="removeMyProperty(object, 'prop')">Test</button> 

控制器

$scope.object = {"prop": "test", "anotherProp" : 10}; 
$scope.removeMyProperty = function(variable, propName){ 
    var keys = _.keys(variable); 
    _.each(keys, function(data){ 
     if(data === propName){ 
      $scope.object = _.omit(variable, propName); 
     } 
     else { 
      console.log("No such property name in array!"); 
     } 
    }); 
}; 

这仅当您使用Underscore.js库,因此必须将其添加到您的项目类路径和进口下划线的作品。 js file in index.html

如果您不熟悉Undersc矿石,请到这里Underscore.js

0

如果对象是始终在一个点上,你知道是什么性质那就除了要删除你可以尝试像一个:

<button ng-show="object.prop" ng-click="object = {otherProp1: object.otherProp1, otherPropN: object.otherPropN}"/> 
0

我认为你可以不这样做。我尝试使用“删除”运算符,如ng-click="delete object.prop"。但事实证明,AngularJS表达式是有限的,并且在编译模板时这给我一个$ parse错误,所以你不得不在控制器中编写它,以便彻底删除它。 How do I remove a property from a JavaScript object?