2016-09-08 3 views
1

처음으로 컨트롤러를 구문으로 구현하려고했는데 내 함수가 템플릿에서 전달하는 컨트롤러 변수를 변경하지 않는 문제에 직면했습니다. 대신 매개 변수를 로컬 변수로 인식합니다. $ scope를 사용하면 이런 일이 발생하지 않습니다.구문으로 컨트롤러가 컨트롤러의 변수 값을 변경하지 않습니다

여기 내 컨트롤러가 있습니다.

angular 
    .module('app') 
    .controller('baseCtrl', baseCtrl); 

    function baseCtrl() { 

    base = this; 
    base.myVar = 'string_1'; 
    base.myFunction = myFunction; 

    function myFunction(value) { 
    value = 'string_2"'; 
    } 
} 

다음은 내 템플릿입니다.

<div ng-controller="baseCtrl as base"> 
    <button ng-click="base.myFunction(base.myVar)">Button</button> 
</div> 

클릭 후 base.myVar가 "string_1"에서 "string_2"로 변경되어야하지만 이는 발생하지 않습니다.

누군가 내가 어떻게 알아낼 수 있는지 알고 있습니까?

+0

*하지, 차이가 무엇을 할 이유 * ... "나는 $ 범위를 사용하는 경우이 일어나지 않을 것입니다"? 귀하의 함수는 여전히 로컬 변수를 변경하고 있습니다 – charlietfl

+0

나는 base가 JavaScript에서 뭔가 일 수 있다고 생각합니다. 어쩌면 그것과 관련이 있을까요? –

답변

0
base.myVar = "string2" 

+0

이 함수는 전역 적으로 사용해야합니다 ... 매개 변수를 전달할 때마다 상대 컨트롤러 변수를 변경해야합니다. – Korte

+0

지금은 할 일이 없다 ... 어쩌면 작동하지만 각도가보기를 업데이트하지 않습니다 ... scope.apply 사용을 고려하십시오. – danday74

+0

Unfortunatelly하지 않습니다. – Korte

1
가 다음과 같이 수행 할 수 있습니다

, 어떻게 당신은이

angular 
 
    .module('app',[]) 
 
    .controller('baseCtrl',function(){ 
 

 
    var base = this; 
 
    base.myVar = 'string_1'; 
 
    base.myFunction = myFunction; 
 
    
 
    
 
    function myFunction(value) { 
 
    value = 'string_2"'; 
 
    base.myVar = value 
 
    alert(value); 
 
    } 
 
    
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app" ng-controller="baseCtrl as base"> 
 
    <input type="text" ng-model="base.myVar"/> 
 
    <button ng-click="base.myFunction(base.myVar)">Button</button> 
 
</div>

+0

내가 필요한 건 base.myVar 함수를 선언하는 것이 아니라 base.myVar 또는 다른 변수를 인덱싱 할 수있는 값입니다. – Korte

1

코드에 약간의 변화가 할당 해결됩니다 그

base.myVar = 'string"'; 
이 같은 myFunction이있는

및 정의 모듈 응용 프로그램 : -

angular.module('app',[]); 

이 작동합니다 수정 된 코드입니다.

angular 
.module('app', []) 
.controller('baseCtrl', baseCtrl); 

function baseCtrl() { 
    var base = this; 
    base.myVar = 'string_1'; 
    base.myFunction = myFunction; 
    function myFunction(value) { 
     base.myVar = 'string_2"'; 
    } 
} 
0

나는 결국 무엇이 잘못되었는지 알아 냈습니다. 문제는 내가 통과하는 변수가 원시적이라는 것이다. 해결책은 내 변수를 원시에서 객체로 변경하는 것입니다.

그래서 내 경우에 해결책은 다음과 같습니다

base.myVar = { 
    val: "string_1" 
}; 

function myFunction(value) { 
    value.val = "string_2"; 
}; 
관련 문제