2014-12-09 2 views
0

동일한 값을 수신 할 때 발사하지 않는 공장에서 시계를 볼 수 있습니다. 이렇게 작동하는 것으로 알고 있지만 어떤 것이 있는지 궁금합니다. 약?각도, 같은 정보를 보낼 때 시계가 켜짐

모달 정보를 보내는 팩토리가 있는데 사용자가 현재 모달을 닫고 다시 열려고합니다.

공장 -

.factory('themeFactory', function() { 
// Service logic 
var x = "no"; 
return { 
    setModal: function (modal) { 

    x = modal; 
    }, 
    getModal: function(){ 
     return x; 
    } 
}; 
}); 

시계 - 그래서 꽤 정직하고 있다는 점에서

$scope.$watch(themeFactory.getModal, function (newModal) { 
    if(newModal != "no"){ 
    $scope.modalOpen = true; 
    $scope.modalInfo = newModal; 

    }else{} 

}); 

사용자가 setModal에서 같은 객체를 전송하는 경우 시계가 바로 발생하지 않습니다. 이 문제를 해결할 수있는 합리적인 방법이 있습니까? 읽어 주셔서 감사합니다!

답변

1

말씀하신대로 값이 변경되면 시계가 작동합니다. 컨트롤러에서 다음

//Use $rootScope to $broadcast the event 
.factory('themeFactory', function ($rootScope) { 
// Service logic 
var x = "no"; 
return { 
    setModal: function (modal) { 

    x = modal; 

    //broadcast event if not "no", your logic from $watch 
    $rootScope.$broadcast(this.modalOpened, modal); 
    }, 
    getModal: function(){ 
     return x; 
    }, 

    //Defining an event name to broadcast 
    modalOpened: "themeFactory.modalOpened" 
}; 
}); 

(또는 시계 넣어 곳) :

$scope.$on(themeFactory.modalOpened, function (e, modal) { 
    $scope.modalOpen = true; 
    $scope.modalInfo = modal; 
}); 

을 당신은 코드가 무엇인지 보여줄 수있는 충분한 코드를 제공하지 않습니다 당신은 당신의 작업을 수행하는 이벤트를 사용할 수있는 소리처럼 기존 모달이 다시 열릴 때 호출됩니다. 나는 setModal 안에 $ 브로드 캐스트를 넣었지만, 여러분은 어디서나 여러분의 범위에 모달이 열렸다는 것을 알리고 싶습니다.

+0

좋아요! 고맙습니다!! – ajmajmajma

관련 문제