2014-11-25 93 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?