요소에 대한 유형 스크립트에서 여러 CSS 스타일 속성을 설정하는 방법은 무엇입니까?
아래 스니펫을 고려해 주십시오.나는 타입스크립트에서 여러 CSS 속성을 설정해야 합니다.그것을 위해 저는 아래 코드를 시도했습니다.
public static setStyleAttribute(element: HTMLElement, attrs: { [key: string]: Object }): void {
if (attrs !== undefined) {
Object.keys(attrs).forEach((key: string) => {
element.style[key] = attrs[key];
});
}
}
위 코드에 대해 매개 변수를 전달해야 합니다.
let elem: HTMLElement = document.getElementById('myDiv');
setStyleAttribute(elem, {font-size:'12px', color : 'red' , margin-top: '5px'});
그러나 인덱스 식이 'number' 유형이 아니기 때문에 Element가 암시적으로 'any' 유형을 가지고 있기 때문에 위의 코드에서 오류(tslint)가 발생합니다. (속성) HTMLlement.style: CSSStyleDeclaration.
제발 도와주세요!!!
사용해 보십시오.setAttribute
TypeScript에 다음이 없습니다.style
에 대한 재산.Element
.
element.setAttribute("style", "color:red; border: 1px solid blue;");
이번 GitHub 호 관련 논의: https://github.com/Microsoft/TypeScript/issues/3263
파티에 조금 늦었지만 어쨌든...
실제 문제는 그것이 아닙니다.style
정의되지 않음Element
그 말입니다.Element
처음에Element implicitly has an 'any' type because index expression is not of type 'number'. (property) HTMLElement.style: CSSStyleDeclaration
는 문장의 첫 번째 단어일 뿐이므로 대문자입니다.어떤 식으로든 관련이 없음을 의미합니다.Element
객체 - 상당히 혼란스럽습니다.
그러나 오류 메시지는 첨자 연산자를 사용하여 속성에 액세스하려고 시도 중임을 의미합니다.[]
인덱스를 잘못 입력했습니다.당신의 경우 당신의key
유형의string
그렇지만HTMLElement.style
이다.CSSStyleDeclaration
인덱스 서명이 다음과 같은 개체[index: number]: string
따라서 키가 유형이어야 합니다.number
.
인덱스 서명은 다음에서 가져옵니다.typescript/lib/lib.dom.d.ts
TypeScript 설치 시 선언 파일은 TypeScript 설치에 있습니다.거기서 찾을 수 있습니다.CSSStyleDeclaration
.
그래서 당신이 할 수 있는 것은 단순히any
이와 같이:
(<any>element.style)[key] = attr[key];
최상의 해결책은 아니지만 효과적이고 간단합니다.또한 사용할 때 필요한 것처럼 스타일을 문자열화할 필요가 없습니다.element.setAttribute
.
이것이 당신이나 다른 누군가에게 도움이 되길 바랍니다.
다음을 사용하여 이를 달성할 수 있습니다.HTLMDivElement
그리고CSSStyleDeclaration
그 안에 포함되어 있습니다.
var container: HTMLDivElement;
container.style.color = "red";
container.style.fontSize = "12px";
container.style.marginTop = "5px";
이는 다음에서 상속되는 다른 클래스에도 적용됩니다.HTMLElement
그리고.style
속성(예:HTMLBodyElement
.
당신이 찾고 있던 API는 https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration/setProperty 입니다.
public static setStyleAttribute(element: HTMLElement, attrs: { [key: string]: Object }): void {
if (attrs !== undefined) {
Object.keys(attrs).forEach((key: string) => {
element.style.setProperty(key, attrs[key]);
});
}
}
개체 키에는 하이픈을 사용할 수 없으므로 여기서도 '를 사용하십시오.
let elem: HTMLElement = document.getElementById('myDiv');
setStyleAttribute(elem, {'font-size':'12px', color: 'red', 'margin-top': '5px'});
이것을 단일 요소에 사용하고 동적으로 만들기 위해 반복할 수 있습니다.
let el: HTMLElement = document.getElementById('elementID');
el.style.height = "500px";
이 문제는 2016년 6월 6일에 게시되었습니다, 유형 스크립트 2.1RC는 문제를 해결할 수 있는 새로운 기능을 갖춘 2016년 11월 9일에 출시되었습니다.
Typescript 핸드북과 for dom style 선언을 읽고 다음 코드와 같이 dom stypescript 선언에 문자열 인덱스 서명이 누락된 이 문제의 키를 발견했습니다.
interface CSSStyleDeclaration {
accentColor: string;
alignContent: string;
// ....
[index: number]: string;
}
문제를 해결하려면 다음과 같이 해야 합니다.
interface CSSStyleDeclaration {
accentColor?: string;
alignContent?: string;
// ....
[index: number]: string;
[propName: string]: string;
}
Utility Types를 사용하여 스타일에 대한 새 Type을 생성했는데 다음과 같이 작동했습니다.
type styleDeclaration = Partial<CSSStyleDeclaration> & { [propName: string]: string };
자세한 내용은 이 데모를 참조하십시오.
type styleDeclaration = Partial<CSSStyleDeclaration> & { [propName: string]: string };
const dom = document.createElement('div');
const styleObj: styleDeclaration = { width: '100px', height: '200px' };
Object.keys(styleObj).forEach((styleKey: string) => {
(dom.style as styleDeclaration)[styleKey] = styleObj[styleKey];
});
안전하지 않은/입력되지 않은 방법:
const e = document.createElement("div")
Object.assign(e.style, {borderSize: "1rem", verticalAlign: "middle"})
즉, 작 을 수 CSS 스 을 로 TypeScript 합 니 다 야 해 환 변 으 대 안 이 이 업 름 타 일 려 면 하 행font-size
대 대fontSize
例경:이름은 가 없을 입니다.잘못된 스타일 이름에 오류가 발생하지 않습니다. {attrFOO: "bar"}
유효합니다.
언급URL : https://stackoverflow.com/questions/37655393/how-to-set-multiple-css-style-properties-in-typescript-for-an-element
'programing' 카테고리의 다른 글
인덱스 목록을 사용하여 행당 특정 열 인덱스를 선택하는 NumPy (0) | 2023.07.18 |
---|---|
줄의 왼쪽 부분을 제거하는 방법은 무엇입니까? (0) | 2023.07.18 |
코코아 포드 설치: 응답 없음 (0) | 2023.07.18 |
밀도도를 만드는 방법 (0) | 2023.07.18 |
SQL Server 2008 Express 데이터베이스에 모든 쿼리를 로깅하시겠습니까? (0) | 2023.07.18 |