2015-01-20 3 views
0

나는 서비스 메소드를 가지고 있으며, boolean 변수의 값을 변경하고 (false는 디폴트 값) 컨트롤러로 돌아 간다. 버튼을 클릭하여이 서비스 메소드를 호출합니다.angularJS 서비스 싱글 톤입니까?

이 버튼을 클릭하면 변수 값이 true로 간주됩니다. 지금은 다른 하나의 컨트롤러에서이 동일한 서비스 메소드에 액세스하고 있으며 false입니다. 왜?

뭐가 잘못 되었나요? 당신이 ,으로 두 가지 기능을 분리하고 있습니다 : 당신이 오타를 가지고있는 것처럼

첫 번째 컨트롤러,

.controller('myController1',.... 
$scope.value = false; 
$scope.buttonClick = function(){ 
      $scope.value = myService.setValue(value); 
} 

초 컨트롤러,

.controller('myController2',..... 
$scope.value = myService.getValue(); 

서비스,

angular.module('myModule', []) 
.service('myService', ['OtherTypes', 
    function (OtherTypes) { 

    var myServiceVariable = false; 
    return { 
    setValue: function (value) { 
       myServiceVariable = !value; 
       return (myServiceVariable); 
      }, 

    getValue: function() { 
       return myServiceVariable; 
      } 
} 
} 
]); 
+0

예, 각 서비스는 싱글 톤 갈 수 있습니다. 코드에 문제가있는 것 같습니다. :) 일부 코드 붙여 넣기 : – dhavalcengg

+0

DI를 사용하여 컨트롤러에서 서비스를 얻고 있습니까? –

+0

예, 컨트롤러에 서비스를 주입 중입니다. 나는 내 질문을 업데이 트했습니다 .pls 다시 참조하십시오. – Dosti

답변

0

이 보이는 ;이 아닙니다. 또한

myServiceVariable = false; 
setValue: function (value) { 
       myServiceVariable = !value; 
       return (myServiceVariable); 
      }; 

getValue: function() { 
     return myServiceVariable; 
    }; 
} 

, 당신은 함수에서 반환 값과 서비스 변수 자체가 아니라 직접 기준으로 2 컨트롤러의 값을 얻고 있기 때문에, 그것은 자동으로 업데이트되도록 기대하지 않습니다에 변경합니다. 매번 getValue() 함수를 호출해야합니다.

+0

예, 매번 getValue()를 호출하고 있습니다. 대신, 작동하지 않습니다 : ( – Dosti

+0

@Dosti'getValue()'메소드에서 디버깅을 시도 했습니까? 함수가 올바르게 입력 되었습니까? –

+0

예 .. getValue() 함수를 올바르게 호출 중 ... – Dosti

0

안녕 다음 코드는 서비스가 angularjs에서 싱글 톤임을 보여 주어야합니다.

작업 데모
myApp = angular.module("myApp",[]); 

myApp.service("myService", function(){ 
    myServiceVariable = false; 
    return { 
     setValue: function (value) { 
       myServiceVariable = value; 
       return (myServiceVariable); 
     }, 

     getValue: function() { 
      return myServiceVariable; 
     } 
    } 
}); 

myApp.controller("controller1", function($scope, myService){ 
    console.log(myService); 
    $scope.clickHandler = function(){ 
     myService.setValue(!myService.getValue()); 
    } 
}); 

myApp.controller("controller2", function($scope, myService){ 
    console.log(myService); 
    $scope.getServiceValue = function(){ 
     return myService.getValue(); 
    } 
}); 

당신은 here

+0

내 기존 코드에서 볼 수있는 모듈 이름은 controller1과 다르다. , 컨트롤러 2 및 서비스에 문제가 있습니까? – Dosti

+1

myService, controller1 및 controller2가 모두 3 개의 다른 모듈에 포함되도록 코드를 업데이트했습니다. 사용하는 모든 모듈이 주 코드에 포함되어 있는지 확인해야합니다. http : //jsfiddle.net/chandings/p0zxjevs/6/ 업데이트 된 코드에 대한 링크 – chandings

+0

예이 코드는 다음과 같습니다. 우리는 동시에 컨트롤러를 초기화하고 있습니다. 컨트롤러 1에서 팝업 창을 연 다음 컨트롤러 2를 초기화하고 getValue() 메서드에 액세스하는 경우를 고려하십시오. – Dosti