首頁 >web前端 >uni-app >學習在uni-app中使用Vue

學習在uni-app中使用Vue

coldplay.xixi
coldplay.xixi轉載
2021-01-19 09:44:143496瀏覽

學習在uni-app中使用Vue

推薦(免費):uni-app開發教學

    文章目錄
  • 前言
  • 一、屬性與方法的使用
  • #二、Vue生命週期
    • 三、全域變數
    • 1.公用模組
    • 2.掛載Vue.prototype
  • 3.globalData
    • #四、Class 與Style 綁定
    • 1.物件語法
  • 2.陣列語法

總結

前言


本文主要的主要內容是在uni-app中Vue的用法,具體如下: Vue支援響應式資料操作,可以實現資料和事件的綁定,同時支援this傳遞; uni-app在Vue實例生命週期的基礎上增加了應用生命週期和頁面生命週期; 實現全域變數的3種方式,即公用模組、掛載Vue.prototype

globalData

Class和Style的動態綁定,包括物件語法和列表語法的使用。

一、屬性和方法的使用Vue是一套基於JavaScript

、用於建立使用者介面的漸進式框架,支援

響應式資料操作,宣告變數後,變數的值變更後,視圖會重新渲染,而不需要手動更新DOM節點。 可以看到,所有的頁面檔案後綴都是.vue,是單檔形式,宣告變數在script模組的data屬性中宣告變數,在<!-- -->template區塊中使用變數時,需要用
{{}}包含變數; 也可以定義方法,執行特定的功能,需要包含在 script模組的methods屬性中,同時可以在元件中綁定事件,格式為v-on:click="事件名稱"

@click="事件名稱"

,可以根據條件觸發對應的事件。

Web事件和uni-app中的事件對應可參考https://uniapp.dcloud.io/use?id=事件處理器。

index.vue如下:

<template>
	<view class="">
		<text>{{name}}</text>
		<button type="primary" @click="changeName">改变名字</button>
	</view></template><script>
	export default {
		data() {
			return {
				name: &#39;Corley&#39;
			}
		},
		onLoad() {
			
		},
		onShow() {
		},
		onHide() {
		},
		methods: {
			changeName: function(){
				this.name = &#39;Corlin&#39;
			}
		},
	}</script><style></style>

其中,

this
代表Vue實例本身,除了呼叫屬性,還可以呼叫方法。 uniapp vue data method basic

顯示:

可以看到,實作了改變名字屬性。

如果函數中嵌套多個函數,this的傳遞可能會出現問題,此時可以使用

變數取代
,如下:uniapp vue data method this replace

<template>
	<view class="">
		<text>{{name}}</text>
		<button type="primary" @click="changeName">改变名字</button>
	</view></template><script>
	var _self;
	export default {
		data() {
			return {
				name: &#39;Corley&#39;
			}
		},
		onLoad() {
			_self = this
		},
		onShow() {
		},
		onHide() {
		},
		methods: {
			changeName: function(){
				_self.name = &#39;Corlin&#39;;
				setTimeout(function(){
					_self.name = &#39;Corlin...&#39;
				}, 2000);
			}
		},
	}</script><style></style>

顯示:

可以看到,在點擊按鈕之後,先改變name,2秒後再改變,即說明_self

取代

this成功。

二、Vue生命週期Vue支援實例生命週期,uni-app在此基礎上增加了應用生命週期

頁面生命週期

###Vue實例生命週期鉤子會自動綁定 this 上下文到實例中,因此可以存取數據,對 property 和方法進行運算。 ### 具體如下:###
函數 意義
#beforeCreate #在實例初始化之後,資料觀​​測(data observer) 和event/watcher 事件配置之前被呼叫
#created 在實例建立完成後被立即呼叫。在這一步,實例已完成以下的配置:資料觀測 (data observer),property 和方法的運算,watch/event 事件回呼。然而,掛載階段還沒開始,$el property 目前尚不可用。
beforeMount 在掛載開始之前被呼叫:相關的 render 函數首次被呼叫。
mounted 實例被掛載後調用,這時el 被新建立的vm.$el 取代了
beforeUpdate 資料更新時調用,發生在虛擬DOM 打補丁之前。這裡適合在更新之前存取現有的 DOM,例如手動移除已新增的事件監聽器。
updated 由於資料變更導致的虛擬DOM 重新渲染和打補丁,在這之後會呼叫該鉤子
activated 被keep-alive 快取的元件啟動時呼叫
#deactivated 被keep-alive 快取的元件停用時呼叫
beforeDestroy 實例銷毀之前呼叫
destroyed 在實例銷毀後呼叫。該鉤子被呼叫後,對應 Vue 實例的所有指令都被解綁,所有的事件監聽器被移除,所有的子實例也都被銷毀。
errorCaptured 當擷取一個來自子孫元件的錯誤時被呼叫。此鉤子會收到三個參數:錯誤物件、發生錯誤的元件實例以及一個包含錯誤來源資訊的字串。此鉤子可以傳回 false 以防止該錯誤繼續向上傳播。

應用程式生命週期屬於整個uni-app項目,僅可在App.vue中監聽,在其它頁面監聽無效。
具體如下:

##onLaunch當uni-app 初始化完成時觸發(全域只觸發一次)#onShow當uni-app 啟動,或從背景進入前台顯示onHide當uni-app 從前台進入後台onError當uni-app 報錯時觸發onUniNViewMessage對nvue 頁面發送的資料進行監聽,可參考nvue 向vue 通訊onUnhandledRejection對未處理的Promise 拒絕事件監聽函數(2.8.1 )onPageNotFound頁面不存在監聽函數onThemeChange監聽系統主題變化
函數 意思
#頁面生命週期屬於某個特定的頁面,對目前頁面有效。

常見頁面生命週期如下:

函數#意思 onLoad監聽頁面加載,其參數為上個頁面傳遞的數據,參數類型為Object(用於頁面傳參),參考範例##onShow#onReadyonHide##onUnload監聽頁面卸載onResize#監聽視窗尺寸變化監聽使用者下拉動作,一般用於下拉刷新,參考範例頁面捲動到底部的事件(不是scroll-view滾到底),常用於下拉下一頁數據。具體見下方註意事項監聽頁面滾動,參數為Object##onNavigationBarButtonTap監聽原生標題列按鈕點選事件,參數為Object#

三、全局变量

uni-app中实现全局变量有几种实现方式。

1.公用模块

定义一个专用的模块,用来组织和管理这些全局的变量,同时将它们作为常量,在需要的页面引入,如果这些常量需要改变,直接在模块中改变即可,而不需要再在每一个导入的页面手动修改,优化了项目的结构。
例如,在 uni-app 项目根目录下创建 common 目录,然后在 common 目录下新建 constants.js 用于保存公共的变量和方法,一般为常量,很少需要改动,如下:

const apiUri = &#39;https://api.jisuapi.com/news/get?channel=头条&start=100&num=20&appkey=66487d31a1xxxxxx&#39;;const sayHi = function(){
	console.log(&#39;hello corley&#39;)}export default {
	apiUri,
	sayHi}

定义之后,需要通过export default导出,可以供其他页面导入使用。

再在index.vue中导入和使用:

<template>
	<view class="">
		<text>{{name}}</text>		
		<button type="primary" @click="changeName">改变名字</button>
		<text>{{link}}</text>
	</view></template><script>
	var _self;
	import common from &#39;../../common/constants.js&#39;
	export default {
		data() {
			return {
				name: &#39;Corley&#39;,
				link: &#39;&#39;
			}
		},
		onLoad() {
			_self = this;
			common.sayHi();
			this.link = common.apiUri		},
		onShow() {
		},
		onHide() {
		},
		methods: {
			changeName: function(){
				_self.name = &#39;Corlin&#39;;
				setTimeout(function(){
					_self.name = &#39;Corlin...&#39;
				}, 2000);
			}
		},
	}</script><style></style>

显示:
uniapp vue global variable common

显然,实现了引用全局变量和方法。

2.挂载 Vue.prototype

将一些使用频率较高的常量或者方法,直接扩展到 Vue.prototype 上,每个 Vue 对象都会继承下来。
这种方式只支持vue页面,同时只需要在 main.js 中定义好即可在每个页面中直接调用。

先在项目的 main.js 中挂载属性或者方法,如下:

import Vue from &#39;vue&#39;import App from &#39;./App&#39;Vue.config.productionTip = false;Vue.prototype.appName = &#39;uni_demo&#39;;App.mpType = &#39;app&#39;const app = new Vue({
    ...App})app.$mount()

再在index.vue中调用即可,如下:

<template>
	<view class="">
		<text>{{name}}</text>		
		<button type="primary" @click="changeName">改变名字</button>
		<text>APP Name: {{app_name}}</text>
	</view></template><script>
	var _self;
	import common from &#39;../../common/constants.js&#39;
	export default {
		data() {
			return {
				name: &#39;Corley&#39;,
				app_name: &#39;&#39;
			}
		},
		onLoad() {
			_self = this;
			common.sayHi();
			this.app_name = this.appName		},
		onShow() {
		},
		onHide() {
		},
		methods: {
			changeName: function(){
				_self.name = &#39;Corlin&#39;;
				setTimeout(function(){
					_self.name = &#39;Corlin...&#39;
				}, 2000);
			}
		},
	}</script><style></style>

显示:
uniapp vue global variable prototype

显然,成功导入了main.js中定义的变量。

3.globalData

对于小程序来说,还可以使用globalData属性在App.vue声明全局变量,同时支持H5、App等平台,是一种比较简单的全局变量使用方式。

App.vue如下:

<script>
	export default {
		globalData:{
			info: &#39;success&#39;
		},
		onLaunch: function() {
			console.log(&#39;App Launch&#39;)
		},
		onShow: function() {
			console.log(&#39;App Show&#39;)
		},
		onHide: function() {
			console.log(&#39;App Hide&#39;)
		}
	}</script><style>
	</style>

index.vue如下:

<template>
	<view class="">
		<text>{{name}}</text>		
		<button type="primary" @click="changeName">改变名字</button>
		<text>Status: {{status}}</text>
	</view></template><script>
	var _self;
	import common from &#39;../../common/constants.js&#39;
	export default {
		data() {
			return {
				name: &#39;Corley&#39;,
				status: &#39;failed&#39;
			}
		},
		onLoad() {
			_self = this;
			common.sayHi();
		},
		onShow() {
		},
		onHide() {
		},
		methods: {
			changeName: function(){
				_self.name = &#39;Corlin&#39;;
				_self.status = getApp().globalData.info;
				setTimeout(function(){
					_self.name = &#39;Corlin...&#39;
				}, 2000);
			}
		},
	}</script><style></style>

显示:
uniapp vue global variable globaldata

可以看到,获取到了App.vue中定义的全局变量globalData

除了前面3种方式,还可以通过Vuex实现,具体可参考https://ask.dcloud.net.cn/article/35021。

四、Class 与 Style 绑定

为节约性能,将 Class 与 Style 的表达式通过 compiler 硬编码到 uni-app 中,实现动态绑定class和style属性。

1.对象语法

可以传给 v-bind:class 一个对象,实现动态地切换 class;
也可以在对象中传入更多字段来实现动态切换多个 class。
v-bind:class 可以简写为:class,并且与普通的 class 共存。

index.vue如下:

<template>
	<view class="">
		<view :class="{active: isActive, fontSize50: isBig}">Hello Corley</view>		
		<button type="primary" @click="changeClass">改变名字</button>
	</view></template><script>
	var _self;
	import common from &#39;../../common/constants.js&#39;
	export default {
		data() {
			return {
				isActive: false,
				isBig: false
			}
		},
		onLoad() {
			_self = this;
		},
		onShow() {
		},
		onHide() {
		},
		methods: {
			changeClass: function(){
				_self.isActive = !_self.isActive;
				_self.isBig = !_self.isBig;
			}
		},
	}</script><style>
	.active {
		color: #DD524D;
	}
	.fontSize50 {
		font-size: 50upx;
	}</style>

显示:
uniapp vue class style object

可以看到,通过对象实现了动态切换class属性。

2.数组语法

可以把一个数组传给 v-bind:class,以应用一个 class 列表,列表的元素可以是变量、字符串、三元运算符或者对象,如下:

<template>
	<view class="">
		<view :class="[&#39;active&#39;, &#39;fontSize50&#39;]">江湖林野</view>		
		<view :class="[isActive?&#39;active&#39;:&#39;&#39;, fontCenter]">奇人异事</view>		
		<view :class="[{back: renderBack}, &#39;fontSize50&#39;]">飞贼走盗</view>		
		<button type="primary" @click="changeClass">改变class</button>
	</view></template><script>
	var _self;
	import common from &#39;../../common/constants.js&#39;
	export default {
		data() {
			return {
				isActive: true,
				isBig: false,
				fontCenter: &#39;fontCenter&#39;,
				back: &#39;back&#39;,
				renderBack: true
			}
		},
		onLoad() {
			_self = this;
		},
		onShow() {
		},
		onHide() {
		},
		methods: {
			changeClass: function(){
				_self.isActive = !_self.isActive;
				_self.isBig = !_self.isBig;
				_self.renderBack = !_self.renderBack;
			}
		},
	}</script><style>
	.active {
		color: #DD524D;
	}
	.fontSize50 {
		font-size: 50upx;
	}
	.fontCenter{
		text-align: center;
	}
	.back{
		background-color: #007AFF;
	}</style>

显示:
uniapp vue class style array

显然,实现了动态切换多个class。

style使用如下:

<template>
	<view class="">
		<view :class="[&#39;active&#39;, &#39;fontSize50&#39;]">江湖林野</view>		
		<view :class="[isActive?&#39;active&#39;:&#39;&#39;, fontCenter]">奇人异事</view>		
		<view :class="[{back: renderBack}, &#39;fontSize50&#39;]">飞贼走盗</view>		
		<view :style="[{ color: activeColor, fontSize: fontSize + &#39;px&#39; }]">神鬼传说</view>		
		<button type="primary" @click="changeClass">改变class</button>
	</view></template><script>
	var _self;
	import common from &#39;../../common/constants.js&#39;
	export default {
		data() {
			return {
				isActive: true,
				isBig: false,
				fontCenter: &#39;fontCenter&#39;,
				back: &#39;back&#39;,
				renderBack: true,
				fontSize: 60,
				activeColor: &#39;#3039dd&#39;
				
			}
		},
		onLoad() {
			_self = this;
		},
		onShow() {
		},
		onHide() {
		},
		methods: {
			changeClass: function(){
				_self.isActive = !_self.isActive;
				_self.isBig = !_self.isBig;
				_self.renderBack = !_self.renderBack;
				_self.fontSize = 30;
				_self.activeColor = &#39;#23A752&#39;
			}
		},
	}</script><style>
	.active {
		color: #DD524D;
	}
	.fontSize50 {
		font-size: 50upx;
	}
	.fontCenter{
		text-align: center;
	}
	.back{
		background-color: #007AFF;
	}</style>

显示:
uniapp vue class style style

可以看到,动态修改了行内样式。

总结

作为使用 Vue.js 开发前端应用的框架,uni-app中支持使用Vue语法,发布时也支持大部分甚至全部Vue的语法,在属性方法的使用、Class和Style的动态绑定等方面有很大的一致性,同时uni-app丰富了生命周期,增加了定义全局变量的方法,扩展了功能,有利于快速开发。

監聽頁面顯示。頁面每次出現在螢幕上都會觸發,包括從下級頁麵返回露出目前頁面
監聽頁面初次渲染完成。注意如果渲染速度快,會在頁面進入動畫完成前觸發
監聽頁面隱藏
##onPullDownRefresh
onReachBottom
onPageScroll

以上是學習在uni-app中使用Vue的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除