2017-11-28 4 views
1

대화 서비스를 구축 중입니다. 좋은 작품

myDialogService.show({ 
    templateUrl: `<div ng-click="$ctrl.log()">Hello dialog</div>`, 
    controller: function() { 
    this.log = function() { 
     console.log("logged from myDialogController"); 
    } 
    } 
}); 

: 대화 상자가이 같은 $ mdDialog 매우 유사한 컨트롤러를 가질 수 있습니다.

각도-모의에서
locals.$scope = scope; 
const invokeController = $controller(options.controller, locals, true); 

const controller = invokeController(); 
if (options.controllerAs) { 
    scope[options.controllerAs] = controller; 
} else { 
    const controllerAs = "$ctrl"; 
    scope[controllerAs] = controller; 
} 

구성 요소 컨트롤러를 호출 할 수 $ componentController 서비스입니다 : 나는 방법 컨트롤러를 호출합니다. 내 코드에서는 등록 된 컨트롤러 또는 지정된 컨트롤러 함수 만 호출 할 수 있습니다. 이것은 단일 컨트롤러가 아닌 등록 된 구성 요소 만 가지고 있기 때문에별로 도움이되지 않습니다.

내 질문

이 가능/생산에 $ componentController를 사용하는 것이 좋습니다? 아니면 내가 겪은 변종에 AngularJS 빌드가 있습니까?

답변

1

$componentController은 테스트에 유용하지만 프로덕션에서 해킹으로 간주되기 때문에 ngMock 모듈에 속합니다. ngMock은 충분히 크고 프로덕션 환경에서 사용할 수 없으므로 붙여 넣기해야 사용할 수 있습니다.

올바른 해결 방법은 등록 된 컨트롤러를 구성 요소 컨트롤러로 다시 사용하거나 JS 모듈로 컨트롤러 함수/클래스 가져 오기/내보내기를 사용하는 것입니다.

MdDialogController은 타사 모듈에 속하므로 등록되거나 내보내지지 않고 작기 때문에 붙여 넣기 만 할 수 있습니다.

+0

내 보낸 구성 요소 컨트롤러를 사용하면 가능한 해결책이 들립니다. TS에서 코드를 작성 했으므로 이미 내 보낸 것입니다. 나는 이것을 시험해 본다. 감사! – scipper

+0

이것은 원래 질문에서 분명하지 않았지만 예, 맞습니다. 각도 모듈 및 DI는 ES 모듈에서 제공하는 기능을 부분적으로 대체합니다. 컨트롤러의 재사용과 상속은 가능한 경우 ES 모듈에 위임되어야합니다. – estus