首页 > 其他 > 详细

uni之this作用域

时间:2020-05-18 20:04:44      阅读:39      评论:0      收藏:0      [点我收藏+]

目录介绍

  • 01.先看一个案例
  • 02.看一下解决方案

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‘);
    	    }
    	});
    },

uni之this作用域

原文:https://www.cnblogs.com/yc211/p/12912372.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!