6

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

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

是否有可能从模板中删除属性并且在控制器中没有附加功能而不是将它们的值设置为undefined

4

5 回答 5

12

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

在 HTML 中

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

在控制器中

$scope.deleteProperty = function() {
    delete $scope.object.prop;
}    
于 2014-11-25T13:04:43.273 回答
0

这是您可以从范围对象中删除任何属性名称的方法。此方法需要使用 Underscore.js 库。

索引.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 库时有效,因此您必须将其添加到项目类路径并在 index.html 中导入 underscore.js 文件

如果你不熟悉 Underscore,请到这里Underscore.js

于 2014-11-25T13:51:27.823 回答
0

我认为你不能那样做。我尝试使用“删除”运算符,例如ng-click="delete object.prop". 但事实证明,AngularJS 表达式是有限的,这在编译模板时给了我一个 $parse 错误,所以不幸的是,你必须在控制器中编写它才能完全删除它。

但是,如果您想完全避免使用控制器,将属性设置为 undefined 可能是一个更好的主意,请阅读 Dan 在这个问题中的答案:如何从 JavaScript 对象中删除属性?

于 2015-04-21T08:25:12.350 回答
0

如果对象始终处于您知道除了要删除的属性之外它还有哪些属性的位置,您可以尝试以下操作:

<button ng-show="object.prop" ng-click="object = {otherProp1: object.otherProp1, otherPropN: object.otherPropN}"/>
于 2015-04-17T20:08:29.987 回答
0

是的...即您可以更改变量的值...也许对您有帮助

尝试这个:

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

或者您可以清除值...

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

您也可以将值设置为 null

 <button ng-show="object.prop" ng-click="object.prop = null"/>
于 2014-11-25T12:42:10.307 回答