Loading

Loading (로딩)

데이터를 불러오는 동안 애니메이션을 보여주는 컴포넌트예요.

출처: 문서

본문

컨테이너 안에서 로딩 (Loading inside a container)

데이터를 불러오는 동안 컨테이너(예: 테이블) 안에서 애니메이션을 표시해요. Element Plus는 로딩을 호출하는 두 가지 방법을 제공해요: 디렉티브(directive)와 서비스(service) 방식이에요. 커스텀 디렉티브 v-loading에는 boolean 값을 바인딩하기만 하면 돼요. 기본적으로 로딩 마스크는 디렉티브가 사용된 요소에 붙어요. body 한정자를 추가하면 마스크가 body 요소에 붙게 돼요.

커스터마이징 (Customization)

로딩 텍스트, 로딩 스피너, 배경색을 커스터마이징할 수 있어요. v-loading이 바인딩된 요소에 element-loading-text 속성을 추가하면 그 값이 스피너 아래에 표시돼요. 마찬가지로 element-loading-spinner / element-loading-svg와 element-loading-background 속성을 각각 사용해서 svg 아이콘, 배경색 값, 로딩 아이콘을 설정할 수 있어요.

WARNING element-loading-spinner / element-loading-svg 속성이 HTML 조각을 지원하기는 하지만, 웹사이트에서 임의의 HTML을 동적으로 렌더링하는 것은 XSS 공격을 유발하기 쉬워서 매우 위험해요. element-loading-spinner / element-loading-svg의 내용이 신뢰할 수 있는지 반드시 확인하세요. 사용자가 제출한 내용을 이 속성에 절대 할당하지 마세요.

전체 화면 로딩 (Full screen loading)

데이터를 불러오는 동안 전체 화면 애니메이션을 보여줘요. 디렉티브로 사용할 때 전체 화면 로딩은 fullscreen 한정자가 필요하고, body에 붙게 돼요. 이 경우 body의 스크롤을 비활성화하고 싶다면 lock 한정자를 추가하면 돼요. 서비스로 사용할 때는 로딩이 기본적으로 전체 화면이 돼요.

서비스 (Service)

로딩을 서비스로도 호출할 수 있어요. Loading 서비스를 임포트합니다:

import { ElLoading } from 'element-plus'

호출해요:

ElLoading.service(options)

매개변수 options는 Loading의 설정이고, 자세한 내용은 아래 표에서 확인할 수 있어요. LoadingService는 Loading 인스턴스를 반환하고, 이 인스턴스의 close 메서드를 호출해서 닫을 수 있어요:

const loadingInstance = ElLoading.service(options)
nextTick(() => {
  // Loading should be closed asynchronously
  loadingInstance.close()
})

이 경우 전체 화면 로딩은 싱글톤(singleton)이에요. 기존 전체 화면 로딩이 닫히기 전에 새 전체 화면 로딩을 호출하면 실제로 새 로딩 인스턴스를 만들지 않고 기존 인스턴스를 반환해요:

const loadingInstance1 = ElLoading.service({ fullscreen: true })
const loadingInstance2 = ElLoading.service({ fullscreen: true })
console.log(loadingInstance1 === loadingInstance2) // true

둘 중 아무 인스턴스에서나 close 메서드를 호출하면 이 전체 화면 로딩을 닫을 수 있어요. Element Plus를 전체 임포트하면 app.config.globalProperties에 전역 메서드 $loading이 등록돼요. this.$loading(options)처럼 호출할 수 있고, 역시 Loading 인스턴스를 반환해요.

앱 컨텍스트 상속 (App context inheritance) 2.9.10

이제 로딩 생성자의 두 번째 매개변수로 컨텍스트를 받아서 현재 앱의 컨텍스트를 주입하고 앱의 모든 속성을 상속받을 수 있어요. 이렇게 사용할 수 있어요:

TIP ElLoading 컴포넌트를 전역 등록했다면 앱 컨텍스트를 자동으로 상속받아요.

import { getCurrentInstance } from 'vue'
import { ElLoading } from 'element-plus'

// in your setup method
const { appContext } = getCurrentInstance()!
ElLoading.service({}, appContext)

API

Options

Name Description Type Default
target Loading이 덮어야 하는 DOM 노드. DOM 객체 또는 문자열을 받아요. 문자열이면 document.querySelector로 전달되어 해당 DOM 노드를 가져와요 string / HTMLElement document.body
body v-loading의 body 한정자와 동일 boolean false
fullscreen v-loading의 fullscreen 한정자와 동일 boolean true
lock v-loading의 lock 한정자와 동일 boolean false
text 스피너 아래에 표시되는 로딩 텍스트 string / VNode / array —
spinner 커스텀 스피너의 클래스 이름 string —
background 마스크의 배경색 string —
customClass 로딩의 커스텀 클래스 이름 string —
svg 기본 로딩 스피너를 대체할 커스텀 SVG 요소 string —
svgViewBox 로딩 svg 요소의 viewBox 속성 설정 string —
beforeClose 2.7.8 로딩이 닫히기 전에 실행되는 함수. 이 함수가 false를 반환하면 닫힘 과정이 중단돼요. 그 외에는 로딩이 닫혀요 Function —
closed 2.7.8 로딩이 완전히 닫힌 후 트리거되는 함수 Function —

Directives

Name Description Type
v-loading 데이터를 불러오는 동안 애니메이션 표시 boolean / LoadingOptions
element-loading-text 스피너 아래에 표시되는 로딩 텍스트 string
element-loading-spinner 커스텀 스피너의 아이콘 string
element-loading-svg 커스텀 스피너의 아이콘 (element-loading-spinner와 동일) string
element-loading-svg-view-box 로딩 svg 요소의 viewBox 속성 설정 string
element-loading-background 마스크의 배경색 string
element-loading-custom-class 로딩의 커스텀 클래스 이름 string

더 알아보기 (Learn more)