Rumah hujung hadapan web uni-app Cara membangunkan komponen lapisan elastik global dalam aplikasi uni (contoh kod)

Cara membangunkan komponen lapisan elastik global dalam aplikasi uni (contoh kod)

Mar 07, 2022 pm 07:59 PM
uni-app

Bagaimana untuk membangunkan komponen lapisan elastik global dalam apl uni? Artikel berikut akan memperkenalkan kepada anda melalui contoh cara melaksanakan komponen lapisan elastik global dalam apl uni. Saya harap ia akan membantu anda!

Cara membangunkan komponen lapisan elastik global dalam aplikasi uni (contoh kod)

Syarikat mempunyai apl yang ditulis menggunakan rangka kerja uni-apl Lapisan elastik di dalam pada asasnya menggunakan uni.showModal dan API lain untuk melaksanakan lapisan elastik . , prestasi pada peranti adalah lapisan elastik asli Atas permintaan pelanggan, ia perlu diganti dengan gaya yang direka, jadi kami mula melaksanakan komponen sedemikian.

Mengikut kaedah dan kaedah yang sering digunakan oleh lapisan elastik, sifat dan kaedah yang dia perlukan boleh disenaraikan secara kasar:

  • Jenis: alert/confirmdll.
  • Paparkan ikon ikon
  • Paparkan kandungan kandungan
  • boleh memanggil api
  • sokongan promise, anda boleh gunakan $api.xx().then

Beberapa perkara pertama ialah Mudah dilakukan, hanya tentukan medan dalam data, dan terus gunakan roda rasmi uni-popup di lapisan luar Dengan cara ini anda mempunyai kurang logik untuk mengawal pop timbul (malas). dan struktur umum ditulis

// template部分
<uni-popup ref="popup" :maskClick="maskClick">
		<view class="st-layer" :style="{ width: width }">
			<view class="st-layer__content">
				<!-- #ifndef APP-NVUE -->
				<text class="st-layer__icon" :class="option.iconClass || getIconClass()"
					v-if="option.type !== &#39;none&#39; && option.showIcon"></text>
				<!-- #endif -->
				<view class="st-layer__msg" v-if="option.msg">
					<text>{{ option.msg }}</text>
				</view>
			</view>
			<view class="st-layer__footer" :class="{&#39;is-reverse-cofirmcancel&#39; : isReverseConfirmCancel}" v-if="option.showConfirmButton || option.showCancelButton">
				<view class="st-layer__footer__btn st-layer__footer__btn--confirm" @tap.stop="confirmClick"
					v-if="option.showConfirmButton"><text>确认</text></view>
				<view class="st-layer__footer__btn st-layer__footer__btn--cancel" @tap.stop="cancelClick"
					v-if="option.showCancelButton"><text>取消</text></view>
			</view>
		</view>
	</uni-popup>
Salin selepas log masuk

Kemudian bahagian js mula-mula hanya melaksanakan beberapa kaedah buka dan tutup

data() {
    return {
            option: {}
    }
},
methods: {
    open(option) {
        let defaultOption = {
                showCancelButton: false, // 是否显示取消按钮
                cancelButtonText: &#39;取消&#39;, // 取消按钮文字
                showConfirmButton: true, // 是否显示确认按钮
                confirmButtonText: &#39;取消&#39;, // 确认按钮文字
                showIcon: true, // 是否显示图标
                iconClass: null, // 图标class自定义
                type: &#39;none&#39;, // 类型
                confirm: null, // 点击确认后的逻辑
                cancel: null, // 点击取消后的逻辑
                msg: &#39;&#39;
        }
        this.option = Object.assign({}, defaultOption, option)
        this.$refs.popup.open()
    },
    close() {
            this.$refs.popup.close()
    },
    confirmClick() {
            const confirmHandler = this.option.confirm
            if (confirmHandler && typeof confirmHandler === &#39;function&#39;) {
                    confirmHandler()
            }
            this.close()
            this.$emit(&#39;confirm&#39;)
    },
    cancelClick() {
            const cancelHandler = this.option.cancel
            if (cancelHandler && typeof cancelHandler === &#39;function&#39;) {
                    cancelHandler()
            }
            this.close()
            this.$emit(&#39;cancel&#39;)
    }
}
Salin selepas log masuk

Ia kini boleh digunakan pada halaman lain

// test.vue  可以使用uni-app的 [easycom组件规范](https://uniapp.dcloud.io/component/README?id=easycom%e7%bb%84%e4%bb%b6%e8%a7%84%e8%8c%83),不用写import语句
<st-layer ref="stLayer"></st-layer>

// js部分
this.$refs.stLayer.open({
    msg: &#39;测试&#39;,
    confirm: () => {
        console.log(&#39;点击了确认&#39;)
    },
    cancel: () => {
        console.log(&#39;点击了取消&#39;)
    }
})
Salin selepas log masuk

Sekarang fungsi asas telah dilaksanakan, tetapi seseorang mahu Setelah berkata demikian, adalah menyusahkan untuk memanggilnya seperti ini isasi? Cara paling mudah ialah membiarkan kaedah terbuka mengembalikan

. Bagaimana untuk memasukkan kaedah
open(msg).then(() => {
    console.log(&#39;点击了确认&#39;)
}).catch(() => {
     console.log(&#39;点击了取消&#39;)
})
Salin selepas log masuk
apabila mengklik sahkan atau batal Lihat kaedah penulisan berikut

promisepromise Jika anda ingin merangkum kaedah berasingan lain, seperti then, anda boleh melanjutkannya berdasarkan asas? daripada terbuka:

...
open() {
     return new promise((reoslve, reject) => {
        ...
        this.option.confirm = this.option.confirm || function confirmResolve () {
            resolve()
        }
         this.option.cancel = this.option.cancel || function cancelReject () {
            reject()
        }
     })
 }
...
Salin selepas log masuk

Komponen lapisan anjal asas sedemikian telah dilaksanakan. Berikut ialah langkah terakhirconfirmUntuk menggunakan komponen lapisan yang ditulis dalam projek vue asal secara global, ia biasanya disuntik ke dalam halaman menggunakan kaedah berikut

confirm(msg, option = {}) {
        if (typeof msg === &#39;object&#39;) {
                option = msg
        } else {
                option.msg = msg
        }
        return this.open({
                ...option,
                showCancelButton: true,
                type: &#39;confirm&#39;
        })
}
// 调用方式
this.$refs.stLayer.confirm(&#39;是否确认?&#39;).then().catch()
Salin selepas log masuk

Ia ditarik terus dan digunakan, dan ralat dilaporkan, mendorong全局使用 , kemudian saya teringat bahawa

mempunyai perbezaan besar daripada projek vue biasa, yang diperkenalkan dalam prinsip operasinya:
import main from &#39;./main.vue&#39;

const LayerConstructor = vue.extend(main)

const initInstance = () => {
  instance = new LayerConstructor({
    el: document.createElement(&#39;div&#39;)
  })

  instance.callback = defaultCallback
  document.getElementById(&#39;app&#39;).appendChild(instance.$el)
}
Salin selepas log masuk

error: document is undefineduni-app Lapisan logik dan lapisan pandangan dipisahkan, pada bahagian bukan H5 Pada masa jalan, ia dibahagikan secara seni bina kepada dua bahagian: lapisan logik dan lapisan paparan. Lapisan logik bertanggungjawab untuk melaksanakan logik perniagaan, iaitu, menjalankan kod js, dan lapisan paparan bertanggungjawab untuk pemaparan halaman. Walaupun pembangun menulis js dan css dalam halaman vue, mereka sebenarnya berpecah semasa penyusunan. Lapisan logik berjalan dalam jscore bebas Ia tidak bergantung pada paparan web tempatan, jadi pada satu pihak ia tidak mempunyai masalah keserasian penyemak imbas dan boleh menjalankan kod es6 pada Android 4.4. navigator, localstorage dan API js khusus pelayar lain.

Jadi kaedah pendaftaran global ini tidak lagi tersedia. Jadi bagaimana untuk melaksanakannya dalam uni-app? Melihat melalui forum rasmi, saya mendapati pelaksanaan pemuat

Prinsip pelaksanaan adalah untuk mendapatkan kandungan templat sfc dan memasukkan kandungan tersuai (iaitu komponen global) di lokasi yang ditentukan kaedah adalah seperti berikut: uni-appvue-inset-loaderArahan konfigurasi

// 第一步
npm install vue-inset-loader --save-dev 
// 第二步 在vue.config.js(hbuilderx创建的项目没有的话新建一个)中注入loader
module.export = {
    chainWebpack: config => {
            // 超级全局组件
            config.module
                    .rule(&#39;vue&#39;)
                    .test(/\.vue$/)
                    .use()
                    .loader(path.resolve(__dirname, "./node_modules/vue-inset-loader"))
                    .end()
	} 
}
// 支持自定义pages.json文件路径  
// options: {  
//     pagesPath: path.resolve(__dirname,&#39;./src/pages.json&#39;)  
// } 
// 第三步 pages.json配置文件中添加insetLoader
"insetLoader": {  
    "config":{  
        "confirm": "<BaseConfirm ref=&#39;confirm&#39;></BaseConfirm>",  
        "abc": "<BaseAbc ref=&#39;BaseAbc&#39;></BaseAbc>"  
    },  
    // 全局配置  
    "label":["confirm"],  
    "rootEle":"div"  
}
Salin selepas log masuk

(lalai:
    )
  • Pasangan nilai kunci yang mentakrifkan nama teg dan kandungan

    config{}

    (lalai:
  • )
  • Teg yang perlu diperkenalkan secara global akan diperkenalkan dalam semua halaman selepas pembungkusan

    label[]

    (lalai :
  • )
  • Jenis teg unsur akar, nilai lalai ialah div, menyokong peraturan biasa, seperti memadankan sebarang teg ".*"

    rootEle "div" dan
    gaya sokongan pada halaman berasingan Konfigurasi dalam, mempunyai keutamaan yang lebih tinggi daripada konfigurasi global

    labelrootEle Pada ketika ini, komponen itu boleh digunakan secara global tidak perlu menulis tag pada setiap halaman untuk menggunakannya Anda hanya perlu memanggil API.

  • Anda boleh mengoptimumkannya kemudian berdasarkan penggunaan. Tahap adalah terhad, nasihat semua orang dialu-alukan.

Disyorkan: "

tutorial uniapp

"

Atas ialah kandungan terperinci Cara membangunkan komponen lapisan elastik global dalam aplikasi uni (contoh kod). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk membangunkan uni-app dalam VSCode? (Perkongsian tutorial) Bagaimana untuk membangunkan uni-app dalam VSCode? (Perkongsian tutorial) May 13, 2022 pm 08:11 PM

Bagaimana untuk membangunkan uni-app dalam VSCode? Artikel berikut akan berkongsi dengan anda tutorial tentang membangunkan uni-app dalam VSCode Ini mungkin tutorial terbaik dan paling terperinci. Datang dan lihat!

Gunakan uniapp untuk membangunkan navigasi peta yang mudah Gunakan uniapp untuk membangunkan navigasi peta yang mudah Jun 09, 2022 pm 07:46 PM

Bagaimana untuk menggunakan uniapp untuk membangunkan navigasi peta yang mudah? Artikel ini akan memberi anda idea untuk membuat peta mudah saya harap ia akan membantu anda!

Mari kita bincangkan tentang cara menggunakan uniapp untuk membangunkan permainan ular! Mari kita bincangkan tentang cara menggunakan uniapp untuk membangunkan permainan ular! May 20, 2022 pm 07:56 PM

Bagaimana untuk menggunakan uniapp untuk membangunkan permainan ular? Artikel berikut akan membimbing anda langkah demi langkah dalam melaksanakan permainan Snake dalam uniapp. Saya harap ia akan membantu anda!

Bagaimana untuk merangkum permintaan antara muka vue3 uni-app Bagaimana untuk merangkum permintaan antara muka vue3 uni-app May 11, 2023 pm 07:28 PM

antara muka uni-app, enkapsulasi kaedah global 1. Cipta fail api dalam direktori akar, buat fail api.js, baseUrl.js dan http.js dalam folder api 2.baseUrl.js kod fail exportdefault"https://XXXX .test03.qcw800.com/api/"3.http.js kod fail exportfunctionhttps(opts,data){lethttpDefaultOpts={url:opts.url,data:data,method:opts.method

Membawa anda langkah demi langkah untuk membangunkan pemalam kalendar uni-apl (dan menerbitkannya) Membawa anda langkah demi langkah untuk membangunkan pemalam kalendar uni-apl (dan menerbitkannya) Jun 30, 2022 pm 08:13 PM

Artikel ini akan membimbing anda langkah demi langkah dalam membangunkan pemalam kalendar uni-apl dan memperkenalkan cara pemalam kalendar seterusnya dibangunkan dari pembangunan hingga keluaran saya harap ia akan membantu anda!

Contoh untuk menerangkan cara uniapp melaksanakan fungsi semua pilihan kotak berbilang pilihan Contoh untuk menerangkan cara uniapp melaksanakan fungsi semua pilihan kotak berbilang pilihan Jun 22, 2022 am 11:57 AM

Artikel ini membawa anda pengetahuan yang berkaitan tentang uniapp, yang terutamanya mengatur isu berkaitan melaksanakan fungsi pilih-semua kotak berbilang pilihan Sebab mengapa ia tidak dapat mencapai fungsi pilih-semua ialah apabila medan yang ditandakan pada kotak pilihan adalah diubah suai secara dinamik, status pada antara muka boleh berubah masa nyata, tetapi acara perubahan kumpulan kotak semak tidak boleh dicetuskan. Saya harap ia akan membantu semua orang.

Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp Mari kita bincangkan tentang pemuatan lungsur turun paparan skrol uniapp Jul 14, 2022 pm 09:07 PM

Bagaimanakah uniapp melaksanakan pemuatan lungsur turun paparan skrol? Artikel berikut bercakap tentang pemuatan lungsur turun applet WeChat scroll-view Saya harap ia akan membantu semua orang.

Contoh terperinci tentang cara uniapp melaksanakan fungsi rakaman telefon (dengan kod) Contoh terperinci tentang cara uniapp melaksanakan fungsi rakaman telefon (dengan kod) Jan 05, 2023 pm 04:41 PM

Artikel ini membawakan anda pengetahuan yang berkaitan tentang uniapp terutamanya cara menggunakan uniapp untuk membuat panggilan dan menyegerakkan rakaman. Saya harap ia dapat membantu semua orang.

See all articles