2015-02-07 87 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

相关问题