2016-09-11 2 views
0

저는 현재 홈 프로젝트를 망설이고 있습니다. 이안 프레임 워크와 함께 angularJS를 사용하고 있습니다. 저는 angularJS를 처음 접했고 컨트롤러간에 전달할 전역 변수를 선언하고 업데이트하는 데 문제가 있습니다. 나는 다음과 같은 전역 변수는 선언 :AngularJS를 사용하고 있습니다. 필요에 따라 전역 변수를 변경할 수 없습니다.

application.value("dataObject", 
{ 
    Nor: 33, 
    Sus: 33, 
    Mal: 33 
}); 

그때 내 하나의 컨트롤러에서 다른 값으로 dataObject.Nor을 설정

application.controller(
    "testingCtrl", 
    function ($scope, $cordovaCamera, dataObject) { 
     ...dataObject.Nor = 45; 
     ...   
    } 
); 

가 그럼 난이 업데이트 된 데이터 객체에 액세스하려면 :

application.controller(
    "ResultsCtrl", 
    function ($scope, dataObject) { 
     ... data: [dataObject.Nor,dataObject.Sus,dataObject.Mal], 
     ... 
    } 
); 

그러나 이렇게하면 dataObject가 업데이트되지 않고 기본 값이 표시됩니다. 내가 뭘 잘못하고 있는지 알지 못하고 그 문제에 대한 어떤 도움을 주셔서 감사합니다!

+0

[AngularJS의 전역 변수] (http://stackoverflow.com/questions/11938380/global-variables-in-angularjs) ... 가능한 가장 쉬운 해결책은'$ rootScope'를 사용하는 것입니다. 모든 컨트롤러에 –

+0

예, 이미 지적했듯이. 두 컨트롤러 사이에 변수를 전달하려면'rootscope' 또는'localstorage'를 사용하십시오. 나는 잘 모르겠다.하지만 나는 'value'안에있는 객체를 수정할 수 없다고 생각한다. –

+0

페이지를 변경하면 문제가 발생합니다. 나는 window.location.href = "results.html"; 새 페이지로 리디렉션합니다. – woofwoof

답변

0

나는 $rootScope 또는 value을 추천합니다. 나는 이것이 안티 패턴이라고 생각하고 $rootScope은 각도 2로 사라질 것입니다.

서비스를 시도하십시오.

application.service('ConfigService', function() { 
    var _config = {}; 

    this.updateConfig = function(c) { 
    angular.copy(c, _config); 
    } 

    this.getConfig = function() { 
    return _config; 
    } 
}) 

application.controller(
    "testingCtrl", 
    function ($cordovaCamera, ConfigService) { 
     ConfigService.updateConfig({Nor: 45}); 
    } 
); 

application.controller(
    "ResultsCtrl", 
    function ($scope, ConfigService) { 
     var dataObject = ConfigService.getConfig(); 
     var data = [dataObject.Nor,dataObject.Sus,dataObject.Mal], 
    } 
); 

data ( dataObject.Nor)의 첫 번째 인덱스는 updateConfig에 다른 통화로 업데이트하지 않을 경우 있음을 유의하십시오. 그 이유는 당신이 참조가 손실되는 간단한 데이터 유형을 전달하고 있기 때문입니다.

+0

아주 좋은 코멘트. 그것은 내 특정 인스턴스에서 작동하지 않지만, – woofwoof

0

하나의 옵션은, 아마도 간단한, 당신의 데이터 객체 공유 할 필요가 컨트롤러 (들)에 $rootScope를 주입하는 것입니다 단순히 다른 컨트롤러에 $rootScope를 주입하여

application.controller("testingCtrl", function ($scope, $rootScope, $cordovaCamera) { 
    $rootScope.dataObject = { 
     Nor: 33, 
     Sus: 33, 
     Mal: 33 
    }; 
} 

그리고이 $rootScope.dataObject에 액세스하는 액세스 권한이 있어야합니다.

자세한 내용은 here을 참조하십시오.

+0

고맙습니다.이 제안 광고를 제 경우에는 작동시키지 않으므로 코드에서 어딘가에서 실수를 저지르고 있습니다. 답장을 보내 주셔서 감사합니다. – woofwoof

관련 문제