ホームページ  >  記事  >  ウェブフロントエンド  >  ユニアプリでの Vue の使い方を学ぶ

ユニアプリでの Vue の使い方を学ぶ

coldplay.xixi
coldplay.xixi転載
2021-01-19 09:44:143439ブラウズ

ユニアプリでの Vue の使い方を学ぶ

# 推奨 (無料): ユニアプリ開発チュートリアル

記事ディレクトリ

    前書き
  • 1. プロパティとメソッドの使用
  • 2. Vue ライフ サイクル
  • 3. グローバル変数
    • 1. パブリック モジュール
    • 2. Mount Vue.prototype
    • 3.globalData
    ##4. クラスとスタイルのバインディング
  • 1. オブジェクト構文
    • 2. 配列構文
    概要
序文

この記事の主な内容は、次のようなユニアプリでの Vue の使用法です。

Vue は応答性の高いデータ操作をサポートしています。データとイベントのバインディングを実現し、この転送をサポートします;

uni-app は、Vue インスタンスのライフ サイクルに基づいてアプリケーション ライフ サイクルとページ ライフ サイクルを追加します;
グローバル変数を実装する 3 つの方法、つまりパブリック モジュール、マウント
Vue.prototype
および globalData; オブジェクト構文とリスト構文の使用を含む、クラスとスタイルの動的バインディング。

1. プロパティとメソッドの使用

Vue は、ユーザー インターフェイスを構築するための

JavaScript

に基づく先進的なフレームワークであり、レスポンシブ データをサポートします。操作では、変数を宣言した後、DOM ノードを手動で更新する必要がなく、変数の値が変更された後にビューが再レンダリングされます。 ご覧のとおり、すべてのページ ファイルのサフィックスは

.vue

であり、これは 1 つのファイルであり、変数は script モジュールの data 属性で宣言されています。 templateブロック内で変数を使用する場合、{{}}; <!-- --> で変数を含める必要があります。また、特定の関数を実行するメソッドを定義することもできます。 に含める script
モジュールのメソッド属性で、同時にコンポーネントにイベントをバインドできます。形式は v-on:click="イベント名" です。および @click="イベント名" を使用すると、条件に基づいて対応するイベントをトリガーできます。 Webイベントとuni-app内のイベントの対応については、https://uniapp.dcloud.io/use?id=Event Processorを参照してください。
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 basicname属性が変更されたことがわかります。

関数内に複数の関数がネストされている場合、これを渡すときに問題が発生する可能性があります。この場合、次のように

変数を使用して

を置き換えることができます:

<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>
表示:


uniapp vue data method this replace ボタンをクリックすると、名前が最初に変更され、2 秒後に再び変更されることがわかります。つまり、## が

_self

に置き換えられます。 #this 成功しました。 2. Vue ライフ サイクル

Vue は インスタンス ライフ サイクル

をサポートし、uni-app はこれに基づいて

アプリケーション ライフ サイクルを追加します ページ ライフ サイクル Vue インスタンスのライフサイクル フックは、このコンテキストをインスタンスに自動的にバインドするため、データにアクセスし、プロパティやメソッドに対して操作を実行できます。 詳細は次のとおりです:

#関数意味##beforeCreatecreatedbeforeMount#mounted インスタンスがマウントされた後に呼び出され、el は新しく作成された vm.$el # に置き換えられます。 beforeUpdateデータが更新されるとき、つまり仮想 DOM にパッチが適用される前に呼び出されます。これは、追加されたイベント リスナーを手動で削除するなど、更新前に既存の DOM にアクセスする場合に適しています。 データ変更により仮想 DOM が再レンダリングされ、パッチが適用され、その後このフックが呼び出されますキープアライブによってキャッシュされたコンポーネントがアクティブ化されたときに呼び出されますキープアライブによってキャッシュされたコンポーネントが非アクティブ化されたときに呼び出されますインスタンスが破棄される前に呼び出されます インスタンスが破棄された後に呼び出されます。このフックが呼び出された後、Vue インスタンスに対応するすべての命令のバインドが解除され、すべてのイベント リスナーが削除され、すべての子インスタンスが破棄されます。 子孫コンポーネントからエラーをキャプチャするときに呼び出されます。このフックは、エラー オブジェクト、エラーが発生したコンポーネント インスタンス、およびエラーの原因に関する情報を含む文字列の 3 つのパラメータを受け取ります。このフックは、エラーがさらに上方に伝播するのを防ぐために false を返すことができます。 アプリケーション ライフ サイクルは uni-app プロジェクト全体に属しており、App.vue でのみ監視できます。他のページでの監視は無効です。 詳細は次のとおりです。
インスタンスが初期化された後、データ オブザーバー (データ オブザーバー) とイベント/ウォッチャー イベント設定は、インスタンスの作成直後に
が呼び出される前に呼び出されます。このステップで、インスタンスはデータ オブザーバー、プロパティとメソッドの操作、監視/イベントのイベント コールバックの構成を完了します。ただし、マウントフェーズはまだ開始されていないため、$el プロパティはまだ使用できません。
マウントの開始前に呼び出されます。関連するレンダリング関数が初めて呼び出されます。
#更新済み
activated
deactivated
beforeDestroy
destroyed
errorCaptured


機能意味 onLaunchユニアプリの初期化が完了したときにトリガーされます (グローバルで 1 回だけトリガーされます)ユニアプリの開始時、またはフォアグラウンドに入ったときバックグラウンドからの表示ユニアプリがフロントデスクからバックグラウンドに入るときUni-app がエラーを報告するとき トリガーされるタイミングnvue ページによって送信されたデータを監視するには、nvue と vue の通信を参照してください 未処理の Promise 拒否イベントのリスニング関数 (2.8.1) がありますページにリッスン機能はありませんシステム テーマの変更の監視ページのライフ サイクルは次のものに属します特定のページであり、現在のページに対して有効です。 一般的なページのライフサイクルは次のとおりです:
onShow
onHide
onError
onUniNViewMessage
onUnhandledRejection
onPageNotFound
onThemeChange


機能意味 onLoad はページの読み込みを監視します。パラメータは前のページで渡されたデータで、パラメータのタイプはオブジェクト (ページパラメータに使用) です。例を参照してくださいページの表示を聞いてください。ページが画面に表示されるたびにトリガーされます。これには、下位レベルのページ ポイントから戻って現在のページを表示する場合も含まれます。最初のページの完了をリッスンします。ページのレンダリング。レンダリング速度が速い場合、ページエントリアニメーションが完了する前に がトリガーされることに注意してください。 #onUnloadonResizeonPullDownRefresh#onReachBottomページがスクロールしたときのイベント(一番下までスクロールビューではなく)、データのプルダウンの「次のページ」によく使用されます。詳細については、以下の注を参照してください。onPageScrollページのスクロールを監視します。パラメータは ObjectonNavigationBarButtonTap# です。 ## ネイティブのタイトル バー ボタンのクリック イベントをリッスンします。パラメータは Object
onShow
onReady
#onHide
ページのアンロードをリッスンします
ウィンドウ サイズの変更をリッスン
ユーザーのプルダウン アクションを監視します。通常はプルダウンの更新に使用されます。例を参照してください。
です。

三、全局变量

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丰富了生命周期,增加了定义全局变量的方法,扩展了功能,有利于快速开发。

以上がユニアプリでの Vue の使い方を学ぶの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。