2015-02-07 2 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 null로 설정됩니다. 나는 나쁜 것을해야한다고 생각하지만 무엇을 찾을 수 없습니다. 나는 deleteZoo(), deleteFoo() 등을 가지지 않으려 고한다.

도움/팁에 감사드립니다!

답변

3

deleteProperty 방법에서는 으로 property 매개 변수를 설정하는 것만으로이 범위에 영향을 미치지 않습니다.

당신이 무슨 일을하는지의 간단한 예는 다음과 같습니다

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

내가 대신 문자열의 재산 그 자체로 속성 이름을 통과 건의 할 것입니다. 그럼 당신은이 작업을 수행 할 수 있습니다 (당신이 당신의 HTML에서하고있는 것처럼) 당신이 정말로 재산 자체를 전달하려는 경우, 당신이 찾는 모든 속성을 통해 루프 필요할 것

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

내가 실제 작업 아니에요 내 컨트롤러 방법에 동물원 개체를 받고 난 당신의 평균, 나는 않을 때 = ng를 클릭 이해한다면

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

"deleteProperty (동물원)"을 선택한 다음 다음과 일치 한 $ scope.zoo하지만 참조 사본에 있습니까? – Mushr00m

+0

@ Mushr00m이 시나리오에서'$ scope.zoo'는 어떤 객체에 대한 _reference_이고'property'는 같은 객체에 대한 _reference_입니다. 'property = null' 행에서,'property'를 변경하여 그 객체 대신에'null'을 참조하도록합니다. '$ scope.zoo'는 그 객체를 계속 참조합니다. 이것이 JavaScript에서 참조가 작동하는 방식입니다. 위의 답을 처음에 추가 한 예를 참조하십시오. – JLRishe

관련 문제