Angular 2에서 HTML 구성 요소의 정적 변수를 바인딩하는 방법은 무엇입니까?


79

HTML 페이지에서 구성 요소의 정적 변수를 사용하고 싶습니다. Angular 2의 HTML 요소와 구성 요소의 정적 변수를 바인딩하는 방법은 무엇입니까?

import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs/Rx';
@Component({
  moduleId: module.id,
  selector: 'url',
  templateUrl: 'url.component.html',
  styleUrls: ['url.component.css']
})
export class UrlComponent {

  static urlArray;
  constructor() {
  UrlComponent.urlArray=" Inside Contructor"
  }
}
<div>
  url works!
   {{urlArray}}
</div >

답변:


119

구성 요소 템플릿의 바인딩 식 범위는 구성 요소 클래스 인스턴스입니다.

전역 또는 정적을 직접 참조 할 수 없습니다.

해결 방법으로 구성 요소 클래스에 게터를 추가 할 수 있습니다.

export class UrlComponent {

  static urlArray;
  constructor() {
    UrlComponent.urlArray = "Inside Contructor";
  }

  get staticUrlArray() {
    return UrlComponent.urlArray;
  }

}

다음과 같이 사용하십시오.

<div>
  url works! {{staticUrlArray}}
</div>

HTML에 for 루프가 있으면? 컴포넌트 정적 변수에 액세스하는 루프가 있습니다. "let person of persons ()"을 사용하면 작동하지 않습니다. 여기에 Persons 메소드가 여러 사람을 반환합니다. "TypeError : self.context.persons는 함수가 아닙니다."오류가 발생합니다.
raj m

@rajm 재현 할 수있는 최소한의 코드로 새 질문을 만드십시오.
Günter Zöchbauer


4
아니, 당신은 확실히 ()게터 가 필요하지 않으며 거기에 있으면 안됩니다. get staticUrlArray() {}하지 않는 public staticUrlArray() {}한 직접 같은 액세스 할 staticUrlArray같은 방법으로 다른, staticUrlArray().
Timothy Zorn

1
참조 : 위해 또한 아래 링크를 참조 github.com/angular/angular/issues/6429
Sudhakar

38

Angular 호출을 방지하기 위해 각주기에서 get staticUrlArray를 사용하려면 컴포넌트의 공용 범위에 클래스 참조를 저장할 수 있습니다.

export class UrlComponent {

  static urlArray;

  public classReference = UrlComponent;

  constructor() {
    UrlComponent.urlArray = "Inside Contructor";
  }

}

그런 다음 직접 사용할 수 있습니다.

<div>
  url works! {{ classReference.urlArray }}
</div>

3
체크 박스 상태에 사용했던 간단한 변수의 경우이 메서드는 get 함수에 대한 수십 번의 호출을 피했습니다. 루프 (예 : 테이블의 행) 내에서 사용하면 정말 해로울 수 있습니다. 이것이 더 나은 대답이고 구문이 조금 더 간단하다고 말하고 싶습니다.
Dean

이것은 매우 흥미로운 솔루션입니다. 클래스 자체에서 클래스에 대한 참조를 선언하는 것은 다소 이상해 보입니다. 그러나 Angular에서는 작동합니다.
Sir Papilonius

1

다음과 같이 클래스 유형의 필드를 선언 할 수도 있습니다.

export class UrlComponent {
  static urlArray;

  UrlComponent = UrlComponent;
  
  constructor() {
    UrlComponent.urlArray=" Inside Contructor"
  }
}

그런 다음이 접두사를 사용하여 정적 변수를 참조 할 수 있습니다.

<div>
  url works! {{UrlComponent.urlArray}}
</div>

이것은 또한 작동합니다 / 템플릿에서 직접 열거 형 또는 콘솔과 같은 개체를 참조하는 데 필요합니다.


매우 mithus7의 대답처럼 보인다
보그 D

@BogdanD는 실제로 "UrlComponent = UrlComponent"를 사용한다는 점에서 약간의 차이가 있지만, 우리가 어떤 클래스에 대해 설명하지 않는 일반적인 "classReference"를 사용하는 것보다 더 표현력이 있다고 생각합니다. mithus7 4 월에 대답하면서 또한, 나는 그것을보고 ... 월에 대답, 난 ... 그 고정, 템플릿의 오타을 한 것으로 나타났습니다
mmey

0

흥미롭게도 템플릿에서 "readonly"접두사가 붙은 클래스 속성을 사용하면 작동합니다. 따라서 정적 변수가 실제로 상수로 판명되면 계속해서

export class UrlComponent {
    readonly urlArray;
}

0

생성자에서 코딩하지 않는 솔루션 :

export class UrlComponent {

  readonly static urlArray = ' Inside Class';

  readonly UrlArray = UrlComponent.urlArray;

  constructor() {  }
}

다른 구성 요소 또는 클래스에서 해당 정적 필드를 사용할 수 있습니다.

import {UrlComponent} from 'some-path';
export class UrlComponent2 {
  readonly UrlArray = UrlComponent.urlArray;
}

템플릿에서 사용 (에서 대문자 'U'참고 UrlArray) :

<div>
  url works!
  {{UrlArray}}
</div>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.