TypeScript를 사용하여 Vue에 대한 사용자 정의 명령 개발
10948 단어 TypeScriptVue.js
동기
만들지 않았기 때문에가상 사용자 정의 명령 도전해보세요
만든 물건
Vue Intersect Directive ( NPM / GitHub )
브라우저의 뷰포트에 요소(어셈블리)가 있는지 확인하고 이 정보에 따라 스타일을 적용하거나 콜백 함수를 호출합니다.그것은 점성 실현에 도움이 될 수 있다.<div v-intersect="{ true: ['visible'] }">Hello</div>
프레젠테이션
Vue.directive 인터페이스 확인
사용Vue.directive API, Vue.directive('vue-intersect', IntersectDirective)
처럼 호출할 수 있는 형식을 목표로 한다.
일단 Vue.dierective API의 유형 정의를 확인합니다.
node_modules/vue/types/vue.d.tsdirective(
id: string,
definition?: DirectiveOptions | DirectiveFunction
): DirectiveOptions;
node_modules/vue/types/options.d.tsexport interface DirectiveOptions {
bind?: DirectiveFunction;
inserted?: DirectiveFunction;
update?: DirectiveFunction;
componentUpdated?: DirectiveFunction;
unbind?: DirectiveFunction;
}
export type DirectiveFunction = (
el: HTMLElement,
binding: DirectiveBinding,
vnode: VNode,
oldVnode: VNode
) => void;
사용자 정의 명령 개발
이번에는 요소가 뷰포트에 존재하는지 판별하기 위해 사용했다IntersectionObserver.
bind 갈고리 함수에서 IntersectionObserver를 생성하고 원소를 감시하는 기능도 있는 것 같지만 unbind 갈고리에서 IntersectionObserver 감시를 끝내는 실현도 준비되어 있다.
대체적인 틀은 다음과 같다.
저는 디테일한 것을 좋아하지 않기 때문에 관심 있는 유형은 GitHub의 출처를 보십시오.
src/intersect-directive.tsimport { DirectiveOptions, DirectiveFunction, VNode } from 'vue'
import { DirectiveBinding } from 'vue/types/options'
/**
*
*/
const bind: DirectiveFunction = (el: HTMLElement, binding: DirectiveBinding, vnode: VNode, oldVnode: VNode) => {
// 具体的な実装
}
/**
*
*/
const unbind: DirectiveFunction = (el: HTMLElement, binding: DirectiveBinding, vnode: VNode, oldVnode: VNode) => {
// 具体的な実装
}
/**
*
*/
const IntersectDirective: DirectiveOptions = {
bind,
unbind,
}
export default IntersectDirective
플러그인화
그리고 사용Vue.use API, Vue.use(VueIntersect)
도 사용할 수 있습니다. 하지만 솔직히 말하면 이곳의 모델이 이렇게 정확한지 모르겠습니다...
Vue가 아니라 _Vue 참조라고 쓰여 있는 것도 있지만사이트 의도는 잘 모르겠어요.
src/index.tsimport IntersectDirective from './intersect-directive'
import Vue, { PluginObject, PluginFunction } from 'vue'
// window.Vue を TS に認識してもらってます。
declare global {
interface Window {
Vue: Vue | undefined
}
}
const install: PluginFunction<never> = () => {
Vue.directive('intersect', IntersectDirective)
}
const VueIntersect: PluginObject<never> = {
install,
}
// import ではなく、<script> タグの読み込みの場合の処理です。
if (window.Vue) {
Vue.use(VueIntersect.install)
}
export { IntersectDirective } // IntersectDirective をエクスポート
export default VueIntersect // PluginFunction をデフォルトエクスポート
경품(NPM에 공개될 때까지)
사용자 정의 지령 개발보다 이 절차에 따라 조사를 하기 때문에 적어야 한다.
모듈 형식 정보
배포할 모듈은 UMD, ESM, 브라우저 세 개(iife)를 컴파일한 RollupJS입니다.
각각구성 파일 준비, 브라우저 버전 패키지에 미니 파일 처리가 추가되었습니다.
유형 스크립트의 유형 정의 파일 내보내기
*.d.ts의 내보내기는 tsconfig.json
에서 declaration
(와declarationDir
속성을 설정하면 되지만 이번에는 Rollup이 묶는 데 미친 영향인지 구축 처리에서 출력 형식 정의 파일이 없습니다.
어쩔 수 없어, 패키지.json 구축 형식 정의 파일에 대한 명령을 준비했습니다."build:dts": "tsc src/index.ts -d --emitDeclarationOnly --declarationDir dist/types"
여기서 마치겠습니다.
Reference
이 문제에 관하여(TypeScript를 사용하여 Vue에 대한 사용자 정의 명령 개발), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/megurock/items/26885943fa5d06d4836d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<div v-intersect="{ true: ['visible'] }">Hello</div>
directive(
id: string,
definition?: DirectiveOptions | DirectiveFunction
): DirectiveOptions;
export interface DirectiveOptions {
bind?: DirectiveFunction;
inserted?: DirectiveFunction;
update?: DirectiveFunction;
componentUpdated?: DirectiveFunction;
unbind?: DirectiveFunction;
}
export type DirectiveFunction = (
el: HTMLElement,
binding: DirectiveBinding,
vnode: VNode,
oldVnode: VNode
) => void;
import { DirectiveOptions, DirectiveFunction, VNode } from 'vue'
import { DirectiveBinding } from 'vue/types/options'
/**
*
*/
const bind: DirectiveFunction = (el: HTMLElement, binding: DirectiveBinding, vnode: VNode, oldVnode: VNode) => {
// 具体的な実装
}
/**
*
*/
const unbind: DirectiveFunction = (el: HTMLElement, binding: DirectiveBinding, vnode: VNode, oldVnode: VNode) => {
// 具体的な実装
}
/**
*
*/
const IntersectDirective: DirectiveOptions = {
bind,
unbind,
}
export default IntersectDirective
import IntersectDirective from './intersect-directive'
import Vue, { PluginObject, PluginFunction } from 'vue'
// window.Vue を TS に認識してもらってます。
declare global {
interface Window {
Vue: Vue | undefined
}
}
const install: PluginFunction<never> = () => {
Vue.directive('intersect', IntersectDirective)
}
const VueIntersect: PluginObject<never> = {
install,
}
// import ではなく、<script> タグの読み込みの場合の処理です。
if (window.Vue) {
Vue.use(VueIntersect.install)
}
export { IntersectDirective } // IntersectDirective をエクスポート
export default VueIntersect // PluginFunction をデフォルトエクスポート
"build:dts": "tsc src/index.ts -d --emitDeclarationOnly --declarationDir dist/types"
Reference
이 문제에 관하여(TypeScript를 사용하여 Vue에 대한 사용자 정의 명령 개발), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/megurock/items/26885943fa5d06d4836d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)