Vue.extend() を使用して elementui を模倣し、メッセージに似たメッセージ プロンプト ボックスを作成します。

ヒント: 職場で遭遇したニーズと解決策を記録します。


序文

これまでは、Vue.extend() が何に使用されるのか、またその使用方法を全く理解していませんでした。いくつかのビデオを見て、Vue ドキュメントと組み合わせることで、Vue.extend() といくつかの簡単なアプリケーションについて簡単に理解できるようになりました。何か問題があります。
スキャフォールディングを使用してvue2プロジェクトを生成して説明します。


提示:以下是本篇文章正文内容,下面案例可供参考

1. ディレクトリ構造

ここに画像の説明を挿入します

2. コード

1. m-Toast.vue ファイルを作成します。

<template>
	<div class="message">
		<div class="text">{
    
    {
    
     text }}</div>
	</div>
</template> 
<script>
export default {
    
    
	name: 'm-Toast',
	props: {
    
    
		text: {
    
    
			type: String,
			default: ''
		},
	},
	mounted () {
    
    
		this.timer = setTimeout(() => {
    
    
			this.$destroy()
			clearTimeout(this.timer);
		}, 2000)
	},
	destroyed () {
    
    
		clearTimeout(this.timer);
		document.body.removeChild(this.$el)
	},
	methods: {
    
    

	},
}
</script>
<style scoped>
.message {
    
    
	min-width: 380px;
	background-color: #f0f9eb;
	color: #67c23a;
	position: fixed;
	padding: 15px 15px 15px 20px;
	top: 20px;
	left: 50%;
	z-index: 2022;
	font-size: 14px;
	transform: translate(-50%, 0);
}

.text {
    
    
	overflow: hidden;
	align-items: center;
}
</style>

2. global.js ファイルを作成する

import Vue from "vue";
import Toast from "./components/m-Toast.vue";

/** 创建 Toast对应的Vue子类(构造器)
 * 结合vue文档 和 视频,
 * extends 的参数可以通过导入一个写好的组件
 * 或者 是函数 ,例如: 
 * {
 *	template: '<div class="message">
 *								<div class="text">{
    
    { text }}</div>
 *							</div>',
 *	data: function () {
 *		return {
 *			text: '测试',
 *		}
 *	}
 * }
 * 下面我选择通过导入组件的方法,因为方便使用样式,结构更明了
 */
let ToastSubclass = Vue.extend(Toast)

// 全局挂载到原型上方便调用
Vue.prototype.$toast = function (text) {
    
    
	// 创建实例
	let ToastConstructor = new ToastSubclass({
    
    
		// 就是在调用组件的时候,给组件传递属性值
		propsData: {
    
    
			text
		}
	});

	/** 挂载(渲染组件)
	 * 使用 $mount() 但不传挂载点,返回一个完整的 Vue 组件实例
	 */
	ToastConstructor.$mount()

	// 把渲染后的真实DOM插入到BODY中即可
	document.body.appendChild(ToastConstructor.$el)
}

3. global.js ファイルを main.js ファイルにインポートします

import Vue from 'vue'
import App from './App.vue'
// 导入 global.js 文件
import './global.js'

Vue.config.productionTip = false

new Vue({
    
    
	render: h => h(App),
}).$mount('#app')

4. App.vue ファイル内のグローバル メソッドを使用して作成されたコンポーネント

<template>
	<div id="app">
		<button @click="config">按钮</button>
	</div>
</template>

<script>

export default {
    
    
	name: 'App',
	data () {
    
    
		return {
    
    
			count: 0
		}
	},
	mounted () {
    
    

	},
	methods: {
    
    
		config () {
    
    
			this.$toast(`测试${
      
      this.count++}`)
		}
	}
}
</script>

<style></style>

おすすめ

転載: blog.csdn.net/qq_45532769/article/details/142518017