programing

컨트롤러 간에 데이터를 전달하다

i4 2023. 2. 20. 23:56
반응형

컨트롤러 간에 데이터를 전달하다

저는 다양한 MV* 프레임워크에서 나오는 AngularJs를 배우려고 합니다.프레임워크는 마음에 들지만 컨트롤러 간에 데이터를 전달하는 데 문제가 있습니다.

입력하다InputCtrl이 되다.
ApproveCtrl은 Approve(approve.html)를 사용합니다.
[ Approve Ctrl ]ctr [ Input Ctrl ]를 선택합니다.이것은 대규모 애플리케이션에서는 매우 일반적인 시나리오인 것 같습니다.

이전 MV* 프레임워크에서는 다음과 같이 처리되었습니다(의사 코드).

   var self = this;
   onClick = function() {
          var approveCtrl = DI.resolve(ApproveCtrl);
          approveCtrl.property1 = self.property1;
          approveCtrl.property1 = self.property2;
          self.router.show(approveCtrl);  
   }            
  • 먼저 컨트롤러처럼 작동합니다.컨트롤러를 먼저 생성하여 올바른 상태로 만들 수 있습니다.그 후 뷰가 생성됩니다.

AngularJS에서는 다음과 같이 대처하고 있습니다.

 var self = this;
 onClick = function(){
          self.$locationService.path('approve');       
 }
  • 이것은 View-first와 같이 동작합니다.탐색할 뷰/경로를 지정하면 컨트롤러가 프레임워크에 의해 작성됩니다.

생성된 컨트롤러의 상태를 제어하고 데이터를 전달하기가 어렵습니다.저는 다음과 같은 방법을 보고 시도해 보았지만, 제 생각에는 모두 나름의 문제가 있습니다.

  1. 공유 서비스를 InputCtrl 및 ApproveCtrl에 삽입하여 이 서비스에 공유하는 모든 데이터를 저장합니다.
    • 이 경우 데이터를 ApproveCtrl에 전달하기만 하면 공유 서비스 상태가 글로벌 상태가 됩니다.
    • 데이터를 ApproveCtrl에 전달하기만 하면 이 공유 서비스의 수명이 필요한 것보다 훨씬 길어집니다.
  2. $route Params 。
    • 패스 파라미터가 많으면 이 문제가 상당히 복잡해집니다.
  3. $140 이 $ $
    • 개념적으로 이것은 이벤트를 사용하는 것이 아닙니다.ApproveCtrl에 데이터를 전달하기만 하면 됩니다.이벤트 같은 것은 없습니다.
    • 이것은 매우 번거롭다. 먼저 부모에게 이벤트를 전송하고, 그 후에 자녀에게 이벤트를 방송해야 한다.

내가 뭘 빠트렸나요?소규모 컨트롤러를 너무 많이 만들고 있습니까?제가 다른 틀에서 나오는 습관을 너무 고수하려고 하는 걸까요?

구조의 관점에서 각도JS는 MVC보다 모듈러형입니다.

클래식 MVC는 컨트롤러가 View와 모델을 연결하는 방식으로 상호 작용하는 3개의 간단한 레이어를 나타냅니다(모델은 View에서 직접 또는 그 반대로 작동하지 않아야 함).

각도에서는 다음과 같이 서로 여러 방식으로 상호 작용할 수 있는 여러 개의 도면요소를 완전히 선택할 수 있습니다.

생각할 수 있는 상호 작용

그렇기 때문에 서로 다른 엔티티 간에 데이터를 통신하는 방법은 여러 가지가 있습니다.다음과 같은 작업을 수행할 수 있습니다.

또는

  • AJAX 백엔드를 사용하여 메시지 보내기
  • 외부 시스템(MQ 등)을 사용하여 메시지 보내기

...그리고 더 많이.Angular는 다양성 때문에 개발자/디자이너가 가장 편한 방법을 선택할 수 있습니다.앵글을 읽는 것을 추천합니다.JS Developer Guide에서는 일반적인 문제에 대한 유익한 해결책을 찾을 수 있습니다.

단순히 두 뷰 간에 데이터를 공유하는 것이 목적이라면 서비스가 최선의 방법일 것입니다.데이터 저장소에 대한 지속에 관심이 있는 경우 REST API와 같은 백엔드 서비스를 고려해 볼 수 있습니다.$http 서비스를 확인해 주세요.

XLII가 완전한 답변을 주어도 서비스를 사용하여 이 튜토리얼을 찾았습니다.이것은 2가지 바인딩 속성을 사용하여 컨트롤러 간에 데이터를 공유하기 위한 매우 흥미롭고 간단한 방법입니다.https://egghead.io/lessons/angularjs-sharing-data-between-controllers

아직 사용하지 않았습니다.

그 이외의 경우 이벤트에 근거한 다른 방법도 있습니다.http://www.objectpartners.com/2013/08/21/using-services-and-messages-to-share-data-between-controllers-in-angularjs/

한 페이지(page1)에서 다른 페이지(page2)로 단순한 문자열 데이터를 전달하는 경우 기존 URL 파라미터를 사용하는 방법이 있습니다."/page2/param1/param2"와 같은 파라미터를 사용하여 page2 route url을 호출합니다.page2의 컨트롤러는 "routeParams"의 파라미터를 수신합니다.routeParams.param1routeParams.param2로서 파라미터에 액세스 할 수 있습니다.아래 코드는 다음 중 하나에서 채택처:angular js를 사용하여 URL 매개 변수를 가져오는 방법

page1의 컨트롤러(js)에서 page2 route 또는 html 내의 URL을 다음과 같이 호출합니다.

"/page2/param1/param2"

페이지 2 루트:

$routeProvider.when('/page2/:param1/:param2', {
    templateUrl: 'pages/page2.html',    
    controller: 'Page2Ctrl'
});

컨트롤러:

.controller('Page2Ctrl', ['$scope','$routeParams', function($scope, $routeParams) {
  $scope.param1 = $routeParams.param1;
  $scope.param2 = $routeParams.param2;
  ...
}]);

이제 page2의 html/template에서 파라미터(param1 및 param2) 값에도 액세스할 수 있습니다.

언급URL : https://stackoverflow.com/questions/18142008/pass-data-between-controllers

반응형