2015-02-07 86 views
0

我想在我的控制器中創建一個方法,以便將來自我的控制器$ scope的不同變量設置爲null。所以,我在我的控制器已經這樣:

FootCreator.controller('FooController', function($scope) { 
    $scope.zoo = { 
     id: 1, 
     name: 'Lorem', 
    }; 

    $scope.foo = { 
     id: 2, 
     title: 'bar', 
    }; 

    $scope.deleteProperty = function(property) { 
     property = null; 
    }; 
}); 

而在我的HTML我這樣調用它(例如): <a ng-click="deleteProperty(zoo)" class="remove icon-remove" title="Remove"></a>

當我CONSOLE.LOG()的$ scope.zoo它不是設置爲空。我認爲我必須做一些壞事,但找不到什麼。我試圖做到不要有deleteZoo(),deleteFoo()等。

感謝您的幫助/提示!

回答

3

在您的deleteProperty方法中,您只需將property參數設置爲null,這對您的範圍決不會產生任何影響。

的你在做什麼這裏一個簡單的例子是:

$scope.zoo = { id: 1, name: 'Lorem' }; 
var property = $scope.zoo; 
property = null; 
console.log($scope.zoo); // previous line had no effect on $scope.zoo 

我建議傳遞屬性名作爲一個字符串,而不是物業本身。然後,你可以這樣做:

$scope.deleteProperty = function(property) { 
    delete $scope[property]; 
}; 
<a ng-click="deleteProperty('zoo')" class="remove icon-remove" 
    title="Remove"></a> 

如果你真的想通過房產本身(就像你在你的HTML做的),你需要遍歷所有屬性找到一個匹配:

$scope.deleteProperty = function(property) { 
    for (var p in $scope) { 
     if ($scope.hasOwnProperty(p) && $scope[p] === property) { 
      delete $scope[p]; 
     } 
    } 
}; 
+0

所以,如果我理解你的意思,當我NG-點擊=「deleteProperty(動物園)」,然後讓動物園的對象在我的控制器方法我沒有實際工作$ scope.zoo,但在參考副本? – Mushr00m 2015-02-07 22:27:37

+0

@ Mushr00m在這種情況下,'$ scope.zoo'是某個對象的_reference_,'property'也是對同一個對象的_reference_。在'property = null'這一行中,你改變'property'來引用'null'而不是那個對象。 '$ scope.zoo'將繼續引用該對象。這就是JavaScript引用的工作原理。請參閱我在答案開頭添加的示例。 – JLRishe 2015-02-08 00:00:05

相關問題