bestsource

AngularJS - 모듈 의존관계, 이름 충돌

bestsource 2023. 3. 5. 10:14
반응형

AngularJS - 모듈 의존관계, 이름 충돌

2개의 서드파티 모듈이 있으며, 두 모듈 모두 같은 이름의 공장을 정의하고 있습니다.분명히, 저는 크러지에 의존하지 않고서는 모듈 이름을 지을 수 없습니다.

또한 2개의 내부 모듈이 더 있으며, 각 모듈은 2개의 서드파티 모듈 중 다른 모듈을 의존관계로 사용합니다(아래 참조).현재 모듈의 의존관계에 없는 모듈의 컴포넌트에 접근할 수 없는 것은 확실하지만, 알고 보니 잘못되어 있었습니다.

여기서도own1에 의존하다thirdParty1(그것은hello로서 정의되다hello world)가 되어가고 있습니다.hi there(출처:thirdParty2)을(를)다른 모듈의 쌍도 마찬가지입니다.

모듈을 "분리"하여 명시적으로 의존하는 것만 사용할 수 있도록 하는 방법이 있습니까?그렇지 않다면 언제든지 도달할 수 있다면 모듈을 장착하는 것이 무슨 의미가 있습니까(메인 앱 모듈에 의존성이 있다고 가정합니다).또한 컴포넌트 이름을 가진 모듈이 2개 있는 경우hello어떤 것이 사용될지 어떻게 알 수 있나요?

다음은 해당 http://jsbin.com/vapuye/3/edit?html,js,output의 jsbin입니다.

angular.module('app', ['own1', 'own2']);

//third-party modules
angular.module('thirdParty1', []).factory('hello', function () {
  return 'hello world';
});

angular.module('thirdParty2', []).factory('hello', function () {
  return 'hi there';
});

// "own" modules
angular.module('own1', ['thirdParty1']).controller('Own1Ctrl', function(hello) {
  this.greet = hello;
});

angular.module('own2', ['thirdParty2']).controller('Own2Ctrl', function(hello) {
  this.greet = hello;
});

그 결과:

<body ng-app="app">
  <div ng-controller="Own1Ctrl as own1">
    Own1: {{ own1.greet }}
  </div>
  <div ng-controller="Own2Ctrl as own2">
    Own2: {{ own2.greet }}
  </div>
</body>

대상:

Own1: hi there
Own2: hi there

특정 모듈의 공장 출하를 명시적으로 요구할 수 있습니다(의존성 주입 없이).

var injector = angular.injector(['thirdParty1']);
var hello1 = injector.get('hello');

var injector = angular.injector(['thirdParty2']);
var hello2 = injector.get('hello');

또, 서드 파티의 공장을 독자적인 공장으로 랩 하는 경우에도 사용할 수 있습니다.

angular.module('own1', ['thirdParty1']).factory('hello1', function () {
  var injector = angular.injector(['thirdParty1']);
  var hello = injector.get('hello');
  return hello;
});

angular.module('own2', ['thirdParty2']).factory('hello2', function () {
  var injector = angular.injector(['thirdParty2']);
  var hello = injector.get('hello');
  return hello;
});

이를 통해hello1그리고.hello2다른 모든 부분에서 사용할 수 있습니다.

모듈(또는 모듈의 컴포넌트)에는 이름 간격이 내장되어 있지 않기 때문에 이를 실현하기 위한 최선의 방법은 모듈에 고유한 명명 규칙을 사용하는 것입니다.대부분의 각도용 도서관은 이렇게 하고, 그러면 당신은 갈 수 있을 것이다.

모듈은 응용 프로그램의 동작을 캡슐화할 뿐만 아니라 응용 프로그램의 테스트와 조롱에도 도움이 됩니다.

나는 각도가 같은 이름의 두 성분을 구별하는 것은 불가능하다고 생각한다(각도 2에 따라 달라지는 것 같다).같은 이름의 컴포넌트 두 개가 같은 기능을 할 수 있는데 왜 둘 다 필요한지 살펴봐야 한다고 주장할 수도 있습니다.

언급URL : https://stackoverflow.com/questions/30374934/angularjs-module-dependencies-naming-clash

반응형