2015-01-30 1 views
0

범위 변수가 $scope.test입니다. 템플릿에서 인수로 호출 된 함수에서이 변수를 전달한 다음 컨트롤러에서 변경하려고하면 원래 $scope.test이 변경되지 않은 것처럼 보입니다. 지역 변수 인 foo 만 변경됩니다. 그러나 foo가 $scope.test에 대한 참조가 아닌가요?템플릿에서 호출 된 함수에서 전달 된 컨트롤러 범위 변수가 매개 변수가 변경 될 때 원래 컨트롤러 변수를 변경하지 않습니다.

var mod = angular.module('app', []); 

mod.controller('myCtrl', function($scope) { 
    $scope.test = 'test'; 

    $scope.doSomething = function(foo) { 
    foo = 'scope.test should change'; 
    } 
}) 

여기서는 위의 컨트롤러에있는 doSomething 함수에 테스트를 전달합니다. http://plnkr.co/edit/JBsos0qVJP47WgfD9Fee?p=preview

답변

3

이 실제로 당신이 Angular.js 내에서 수행 할 수 있습니다 무언가이다 :

<body ng-app='app'> 
    <div ng-controller='myCtrl'> 

     <button ng-click="doSomething(test)">testing</button> 

     <h1>{{test}}</h1> 

    </div> 
    </body> 

다음은 plunker입니다. 그러나 귀하의 경우, 대신 대신 이 전달되고 JavaScript는 인 원시 문자열을 전달하고 있습니다. 객체를 전달하고 객체의 속성을 변경할 수는 있지만 원시 객체를 전달할 때는 변경할 수 없습니다. 이것은 Angular.js의 모범 사례 중 하나가 바인딩 가능한 모든 항목에 객체의 속성 인 .이있는 이유이기도합니다.

http://docstore.mik.ua/orelly/webprog/jscript/ch11_02.htm

+0

나는이에게 자신을 사용하지 않는,하지만 앤드류는 언급 한 것을 시도하고 작동하는 것 같다 않을 것 : http://plnkr.co/edit/FByCft2Pmgo2dOI4k7eY?p=preview –

+0

아, 물론! 나는 이전에 비슷한 것을 성취했다는 것을 알았지 만, 당신이 말한 바와 같이 참조로 전달되는 대상을 항상 가지고 있음을 깨닫지 못했습니다. – sq1020

관련 문제