2014-11-25 18 views
5

Tôi có một biến phạm vi $scope.object = { prop: 12345 } có thuộc tính tôi xóa với cài đặt chúng thành undefined.Xóa thuộc tính khỏi biến phạm vi

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

Có khả năng xóa thuộc tính từ bên trong mẫu và không có chức năng bổ sung trong bộ điều khiển thay vì đặt giá trị của chúng thành undefined?

+1

Bạn có muốn xóa thuộc tính cụ thể từ các đối tượng hoặc tất cả chúng? –

+0

@AmirAl: Một thuộc tính cụ thể ở bất kỳ đâu bên trong đối tượng. Ví dụ ở đường dẫn "object.prop.foo [2] .bar". –

+0

@AmirAl: Nó không phải là một bản sao kể từ khi chúng tôi đang nói về mã mẫu AngularJS không Javascript Code. –

Trả lời

0

Có ... I.e. mà bạn có thể thay đổi giá trị của biến ... Có lẽ nó sẽ là một trợ giúp cho bạn

thử điều này:

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

hoặc bạn có thể xóa giá trị ...

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

bạn cũng có thể đặt giá trị thành null

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

Điều đó sẽ thay đổi thuộc tính thành một 'chuỗi' với giá trị' "undefined" 'hoặc' "" '. Vì vậy, điều này không xóa bất cứ điều gì. –

+0

bạn cũng có thể đặt giá trị thành null < ' – Giwwel

+0

Nó vẫn tồn tại sau đó. –

10

sử dụng các mã bên dưới để xóa thuộc tính khỏi đối tượng

Trong HTML

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

Trong điều khiển

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

Đó không phải là cách thuận tiện để làm điều đó vì nếu bạn muốn xóa các thuộc tính khác trong đối tượng mà bạn không thể thực hiện bằng phương pháp như vậy. phương pháp bạn có thể xóa chỉ prop tên tài sản trong đối tượng –

+0

Không trả lời câu hỏi vì điều này liên quan đến chức năng điều khiển. –

0

Dưới đây là cách mà bạn có thể xóa bất kỳ tên thuộc tính từ các đối tượng phạm vi. Phương thức này yêu cầu sử dụng thư viện 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> 

khiển

$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!"); 
     } 
    }); 
}; 

này chỉ hoạt động khi bạn sử dụng thư viện Underscore.js và do đó bạn phải thêm nó vào classpath dự án của bạn và nhập khẩu gạch dưới. tệp js trong index.html

Nếu bạn chưa quen với Undersc quặng, vui lòng vào đây Underscore.js

0

Nếu đối tượng luôn luôn là tại một điểm mà bạn biết những gì thuộc tính nó sẽ có bên cạnh một trong những bạn đang xóa bạn có thể thử một cái gì đó như:

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

Tôi nghĩ rằng bạn có thể không làm thế. Tôi đã thử sử dụng toán tử "xóa", giống như ng-click="delete object.prop". Nhưng nó chỉ ra rằng AngularJS biểu thức được giới hạn và điều này mang lại cho tôi một lỗi phân tích $ trong khi biên dịch các mẫu, vì vậy bạn sẽ phải viết rằng trong bộ điều khiển để hoàn toàn xóa nó, không may.

Nhưng nếu bạn muốn tránh điều khiển ở tất cả các phương tiện, thiết lập thuộc tính để xác định có thể là một ý tưởng tốt hơn, đọc những câu trả lời của Dan trong câu hỏi này: How do I remove a property from a JavaScript object?

Các vấn đề liên quan