>웹 프론트엔드 >JS 튜토리얼 >AngularJS 컨트롤러는 중첩 없이 어떻게 통신할 수 있나요?

AngularJS 컨트롤러는 중첩 없이 어떻게 통신할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-12-08 10:13:11294검색

How Can AngularJS Controllers Communicate Without Nesting?

Angular 컨트롤러 간 통신

AngularJS에서는 컨트롤러 간 통신을 촉진하는 것이 필요한 경우가 많습니다. 그러나 컨트롤러가 중첩되지 않은 경우 다른 컨트롤러 내의 한 컨트롤러에서 변수에 액세스하는 것은 문제가 됩니다.

상속 없이 변수 전달

첫 번째 컨트롤러(Ctrl1)를 $scope를 사용하여 두 번째 컨트롤러(Ctrl2)에 인수를 추가하면 정의되지 않은 오류로 인해 Ctrl1을 실행할 수 없습니다. 마찬가지로 Ctrl2.prototype = new Ctrl1();을 사용하여 Ctrl1에서 Ctrl2로 속성을 상속합니다. 역시 실패합니다.

해결책: 서비스 활용

중첩하지 않고 컨트롤러 간에 변수를 공유하려면 효과적인 솔루션은 서비스를 생성하여 모든 관련 컨트롤러에 주입하는 것입니다. 서비스는 기능을 공유하기 위해 여러 컨트롤러 또는 지시문에 삽입할 수 있는 Angular 구성 요소입니다.

서비스 예:

angular.module('myApp').service('sharedProperties', function() {
  var property = 'First';

  return {
    getProperty: function() {
      return property;
    },
    setProperty: function(value) {
      property = value;
    }
  };
});

컨트롤러에서의 사용법:

function Ctrl1($scope, sharedProperties) {
  sharedProperties.setProperty('New First');
}

function Ctrl2($scope, sharedProperties) {
  $scope.prop2 = 'Second';
  $scope.both = sharedProperties.getProperty() + $scope.prop2;
}

주입하여 sharedProperties 서비스를 두 컨트롤러 모두에 적용하면 공유 데이터에 독립적으로 액세스하고 수정할 수 있습니다.

공유 값에 바인딩

공유 값에 액세스하는 것 외에도 다음 작업도 가능합니다. 컨트롤러의 범위에서 바인딩합니다. 바인딩된 참조를 유지하려면 기본 유형 대신 객체의 속성에 바인딩하는 것이 좋습니다.

var property = { Property1: 'First' };

// Binded to a static copy in Ctrl1
$scope.prop11 = property.Property1;

// Binded to the shared value in Ctrl2
$scope.prop12 = sharedProperties.getProperty().Property1;

위 내용은 AngularJS 컨트롤러는 중첩 없이 어떻게 통신할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.