uniapp之this作用域

更新日期: 2020-04-19阅读: 2.4k标签: uniapp

01.先看一个案例

代码如下所示

发现了点击按钮1可以更新title内容,但是点击按钮2却无法更新title内容。这个究竟是为什么呢?

<template>
	<view class="container">
		<text>{{title}}</text>
		<button type="default" @click="changeTitle1">改变标题内容按钮1</button>
		<button type="default" @click="changeTitle2">改变标题内容按钮2</button>
	</view>
</template>

<script>
	export default{
		data(){
			return{
				title : "这个是标题",
			}
		},
		methods:{
			changeTitle1(){
				this.title = "改变标题1";
			},
			//可以发现下面这个执行了success方法,但是调用this赋值却无法改变内容
			changeTitle2(){
				uni.setStorage({
				    key: 'storage_key',
				    data: 'hello',
				    success: function () {
						this.title = "改变标题2";
				        console.log('changeTitle2------success');
				    }
				});
			},
		}
	}
</script>

<style>
	.container{
		display: flex;
		flex-flow: column;
	}
</style>

为什么changeTitle2无法改变title内容

在changeTitle2方法的success方法中,该success方法指向闭包,所以this属于闭包,由此在success回调函数里是不能直接使用this.title的。


02.看一下解决方案

可以发现这样操作就可以解决作用域问题

第一种解决方案

解决办法就是在闭包之外先把this赋值给另一个变量

//可以发现这样操作就可以解决作用域问题
changeTitle3(){
	//赋值
	var me = this;
	uni.setStorage({
	    key: 'storage_key',
	    data: 'hello',
	    success: function () {
			me.title = "改变标题3";
	        console.log('changeTitle2------success');
	    }
	});
},

第二种解决方案

使用箭头函数也可以解决该问题,思考一下这是为什么?

changeTitle4(){
	uni.setStorage({
	    key: 'storage_key',
	    data: 'hello',
	    success:() => {
			this.title = "改变标题4";
	        console.log('changeTitle2------success');
	    }
	});
},

链接: https://www.fly63.com/article/detial/9063

uni-app 微信小程序授权登录

uni.getUserInfo 接口调用方式起初通过button 来获取用户信息,或者 直接调用 uni.getUserInfo 来获取信息 在当前微信更新接口后,这2个接口将直接返回匿名用户数据,不在弹窗提示

uniapp 页面跳转传值和接收

首先介绍最原始的跳转方法,类似于html中的 a 标签,不过在uniapp中需要将 a 标签换成 <navigator url=跳转的地址>……</navigator>

uniapp开发注意事项

static 目录下的 js 文件不会被编译,如果里面有 es6 的代码,不经过转换直接运行,在手机设备上会报错。css、less/scss 等资源同样不要放在 static 目录下

uniapp验证码倒计时60s的实现

发送验证码时,不能让客户一直发送验证码,所以需要设置一个60s后才能发送一次;具体代码实现:因为app和其他app不太一样,所以需要选择以这样的方式展示是时间,但是js逻辑代码是一样的;

uni-app中使用computed计算属性

computed里面的属性不能在data属性中出现,用来监控computed中自定义的变量 ,computed合适多个变量或对象处理后返回一个结果值,其中一个值发生变化则computed监控的属性值就会发生变化

uni-app开发经验分享: 多页面传值的三种解决方法

开发了一年的uni-app,在这里总结一些uni-app开发中的问题,提供几个解决方法,分享给大家:问题描述:一个主页面,需要联通一到两个子页面,子页面传值到主页面,主页面更新

uni-app开发注意事项

当重复设置某些属性为相同的值时,不会同步到view层。 例如:每次将scroll-view组件的scroll-top属性值设置为0,只有第一次能顺利返回顶部。 这和props的单向数据流特性有关

uniapp页面通信方法总汇

uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。

uniapp/小程序实现Url生成二维码图片

基于QR.createQrCodeImg方法生成二维码,在使用uniapp开发的小程序,app应用,某一页面需要将网页Url生成的二维码进行展示,即将Url生成为base64的二维码图片。

uniapp在onLaunch中使用redirectTo或reLaunch跳转页面后点击事件失效

使用uniapp编译成小程序时,在生命周期onLaunch中运用redirectTo或reLaunch跳转页面后点击事件失效,但是如果你重定向的页面中有使用navigator组件跳转后再返回,点击事件又有效了,在原生微信小程序中重定向没有问题

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!