2014-11-25 4 views
5

Ho una variabile di ambito $scope.object = { prop: 12345 } di cui cancello le proprietà con impostandole su undefined.Elimina proprietà dalla variabile scope

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

C'è la possibilità di eliminare un oggetti di all'interno di un modello e senza una funzione aggiuntiva del controller invece di impostare i loro valori a undefined?

+1

Vuoi eliminare proprietà specifica dall'oggetto o tutti loro? –

+0

@AmirAl: una proprietà specifica all'interno dell'oggetto. Ad esempio sul percorso "object.prop.foo [2] .bar". –

+0

@AmirAl: Non è un duplicato poiché stiamo parlando del codice del template AngularJS non del codice Javascript. –

risposta

0

Sì ... I.e. che è possibile modificare il valore della variabile ... Forse sarà un aiuto per voi

provare questo:

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

oppure si può cancellare il valore ...

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

inoltre è possibile impostare il valore su null

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

Ciò cambierebbe la proprietà in una 'stringa' con il valore' "undefined" 'o' "" '. Quindi questo non cancella nulla. –

+0

anche tu puoi impostare il valore su null '' – Giwwel

+0

E 'ancora esistente allora. –

10

usare i codici di seguito per eliminare una proprietà da un oggetto

In HTML

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

controller

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

Non è un modo conveniente per farlo perché se si desidera eliminare altre proprietà nell'oggetto non è possibile farlo con tale metodo. metodo è possibile eliminare solo la proprietà denominata prop nell'oggetto. –

+0

Non risponde alla domanda poiché ciò implica le funzioni del controller. –

0

Ecco il modo in cui è possibile eliminare qualsiasi nome della proprietà dall'oggetto di portata. Questo metodo richiede l'utilizzo della libreria 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> 

controller

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

Questo funziona solo quando si utilizza biblioteca Underscore.js e quindi è necessario aggiungerlo al classpath del progetto e l'importazione di sottolineatura. js file in index.html

Se non si ha familiarità con Undersc minerale, vai qui Underscore.js

0

Se l'oggetto è sempre a un punto che si sa quali proprietà avrebbe oltre a quello che si sta eliminando si potrebbe provare qualcosa di simile:

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

Penso che si può Fallo. Ho provato a utilizzare l'operatore "delete", qualcosa come ng-click="delete object.prop". Ma risulta che le espressioni di AngularJS sono limitate e questo mi dà un errore $ parse durante la compilazione del template, quindi dovresti scriverlo nel controller per eliminarlo completamente, sfortunatamente.

Ma se si vuole evitare il controller a tutti i mezzi, impostando la proprietà su undefined potrebbe essere un'idea migliore, leggere la risposta di Dan in questa domanda: How do I remove a property from a JavaScript object?