문제

일부 주에서 각도 UI 라우터를 사용하여 간단한 응용 프로그램을 사용합니다.

실제로이 라우터에 이러한 종류의 코드가 있습니다.

$stateProvider.state('map.layers', {
    url: '/layers',
    templateUrl: 'views/layers.html',
    controller: 'LayersCtrl',
    onEnter: function(map: Master.Map) {
      // do stuff
    },

    onExit: function(map: Master.Map) {
      // do stuff
    }
  });
.

컨트롤러는 다른 파일에 정의되며 동일한 파일에서 Onenter 및 Onexit 콜백을 정의하는 좋은 방법을 찾고 있습니다.

귀하의 의견으로 최상의 해결책은 무엇입니까?전역 변수는 작동하지만 매우 아름답 지 않습니다.

도움이 되었습니까?

해결책

이 작업을 수행 할 수 있지만 이는 코드 냄새가 더 많이 알지 못합니다.컨트롤러와 상태 사이에 논리를 혼합하고 있지만 분리되어야합니다.

어쨌든, 당신이 이것을 할 수있는 방법은 다음과 같습니다.

컨트롤러에서 $state 객체를 주입하고 $state.get 메소드를 사용합니다.

.controller('layersCtrl', function($state) {
  $state.get('map.layers').onEnter = blah;
  $state.get('map.layers').onExit = blahblah;
});
.

그러나이보다는이 공유 기능을 서비스로 추출하는 것이 좋습니다.이것을하기가 어렵다면 모듈 사이에 너무 많은 커플 링이있는 것처럼 보이기 때문에 코드를 깊이 살펴볼 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top