AngularJS - 更改控制器方法内的变量并不更新$ scope变量

时间:2015-02-07 18:17:23

标签: angularjs

我想在我的控制器中创建一个方法,将我的控制器$ 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没有设置为null。我想我必须做点坏事,但找不到什么。我试着这样做,不要有deleteZoo(),deleteFoo()等。

感谢您的帮助/提示!

1 个答案:

答案 0 :(得分: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];
       }
   }
};