Angular 14를 사용한 실험적 클래스 구성
10269 단어 angulartypescriptjavascriptwebdev
안타깝게도 Angular는 클래스와 결합되어 있습니다. 그리고 사각형 못 함수를 둥근 구멍 클래스에 맞추려는 많은 시도에도 불구하고 실제로는 제대로 작동하지 않습니다. Angular는 이유가 있어서 하는 일을 하고 우리는 Angular를 그렇지 않은 것으로 만들려고 해서는 안 됩니다.
그러나 어쨌든 그것을 원하고 단 한 줄의 코드로 그것을 가능하게 하는 방법을 우연히 발견한다면 어떨까요?
<p>Count: {{ counter.value }}</p>
@Auto()
@Component()
class MyComponent {
// nothing unusual?
counter = new Counter()
ngOnInit() {
console.log("so far so good")
}
}
@Auto()
class Counter {
value = 0
interval
increment(ctx) {
ctx.value++
}
ngOnInit() {
console.log("wait what?")
this.interval = setInterval(this.increment, 1000, this)
}
ngOnDestroy() {
console.log("this shouldn't be possible")
clearInterval(this.interval)
}
}
기능 구성의 주요 기능 중 하나는 수명 주기 후크를 추출하여 많은 구성 요소에서 재사용할 수 있는 단일 논리 단위로 함께 배치하는 기능입니다. Angular에서 이 논리 단위는 일반적으로
Injectable
로 장식된 서비스로 표현됩니다.그러나 서비스에는 기능 구성에 비해 몇 가지 단점이 있습니다.
@Self
. Angular는 장식된 클래스의 수명 주기 후크만 지원하지만 위의 예에는 수명 주기 후크가 있는 임의
Counter
개체가 있습니다. 어떻게 작동합니까? 왜 지금?각도 14
최근 기사에서
inject
가 구성 요소를 포함하여 모든 Angular 장식 클래스에 대한 공개 API가 된 방법을 설명합니다. 이것은 의존성을 인스턴스화하는 유일한 수단인 생성자로부터 우리를 해방시켜 전혀 해킹 없이 다음을 가능하게 합니다.@Component()
class MyComponent {
resource = new Resource()
}
class Resource() {
http = inject(HttpClient) // now works in Angular 14!
}
종속성을 주입하는 기능은 컴포지션 퍼즐의 또 다른 핵심 요소입니다. 구성 요소 수명 주기에 연결하는 방법이 필요합니다.
자동 합성
mmuscat / 각도 자동
Angular용 자동 데코레이터
Angular용 자동 데코레이터
@Auto()
@Component({
template: `{{ count }}`,
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class MyComponent {
@Input()
count = 0;
object = new Resource()
@Subscribe()
autoIncrement = interval(1000).pipe(
tap((value) => this.count = value + 1)
);
@Unsubscribe()
subscription = new Subscription();
ngOnInit() {
console.log("I am called!")
}
}
@Auto()
export class Resource {
private http = inject(HttpClient)
@Check()
value
ngOnInit() {
console.log("I am also called!")
}
fetch(params) {
this.http.get(endpoint, params)
.subscribe(
…
View on GitHub
한 줄의 코드로 구성 요소, 지시문, 서비스 등에 Auto
를 추가하기만 하면 다른 Auto
장식 개체와 즉시 구성됩니다.
배후에서 이 데코레이터는 수명 주기 후크를 클래스 필드 이니셜라이저 또는 생성자 내부에 생성된 모든 객체Auto
에 계단식으로 배열합니다. 구성 요소 수명 주기가 서비스로 누출되지 않도록 보호되며 그 반대도 마찬가지입니다.
사용해 보세요!
하지만 문제가 있습니다
지금은 mutating some private Angular APIs 에 의해서만 가능합니다. 따라서 프로덕션에서 시도해야 하는 것은 절대 아닙니다 🙇
각도 친화?
다른 프레임워크에서 useXXX
를 보고 움찔한다면 Angular에서 이것을 옹호하는 것이 아니므로 안심하십시오.
Angular에서는 new XXX
를 사용합니다.
행복한 코딩!
Reference
이 문제에 관하여(Angular 14를 사용한 실험적 클래스 구성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/antischematic/experimental-class-composition-with-angular-14-ief
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Angular 14를 사용한 실험적 클래스 구성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/antischematic/experimental-class-composition-with-angular-14-ief텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)