• Welcome to Journal web site.

我是 PHP 程序员

- 开发无止境 -

Next
Prev

微信小程序--作用域

Data: 2016-04-22 03:17:03Form: JournalClick: 7

# 微信小程序--作用域


# 一、变量作用域

# 1、全局变量:app.js中的参数

App({
  data : '全局变量'
})
  • 获取全局变量
var global = getApp();
console.log(global.data);
  • 改变全局变量,其他页面调用改变后的数据
var global = getApp();
global.data = '改变全局变量';

# 2、局部变量

  • 创建变量 varlet,在当前文件的任何位置都可以使用、更改
var name = '欧阳克';
let age = 18;
Page({
  onLoad(){
    console.log(name);
    console.log(age);
    name = '朱老师';
    age = 38;
  },
  onShow(){
    console.log(name);
    console.log(age);
  }
})

# 3、私有变量

Page({
  onLoad(){
    // 变量只能在onLoad方法中使用
    var name = '朱老师';
    let age = 38;
  },
  onShow(){
    // 这里会报错,找不到变量
    console.log(name);
    console.log(age);
  }
})

# 二、data 数据

# 1、获取 data

Page({
  data: {
    name: '欧阳克',
    age: 18
  },
  onLoad(){
    console.log(this.data.name);
    console.log(this.data.age);
  }
})

# 2、设置 data

  • 直接修改 this.data 而不调用 this.setData 是无法改变页面的状态的,还会造成数据不一致
Page({
  data: {
    name: '欧阳克',
    age: 18
  },
  onLoad(){
    this.data.name = '朱老师';
    this.data.age = 38;
    console.log(this.data.name);
    console.log(this.data.age);
  }
})
<view>姓名:{{name}}</view>
<view>年龄:{{age}}</view>

# 3、动态设置 data

  • setData 函数用于将数据从逻辑层发送到视图层(异步),同时改变对应的 this.data 的值(同步)

编号|字段|类型|必填|描述 ---|---|---|---|---|--- 1|data|Object|是|这次要改变的数据 2|callback|Function|否|setData引起的界面更新渲染完毕后的回调函数

Page({
  data: {
    name: '欧阳克',
    age: 18
  },
  onLoad(){
    this.setData({
      name : '朱老师',
      age : 38
    },function(){
      console.log('修改成功');
    })
  },
  dynamic(){
    this.setData({
      name: e.target.dataset.name,
      age: e.target.dataset.age
    }, function () {
      console.log('修改成功');
    })
  }
})
<view>姓名:{{name}}</view>
<view>年龄:{{age}}</view>
<button bindtap="dynamic" data-name="西门大官人" data-age="28">动态改变数据</button>

# 4、动态设置 数组和对象

Page({
  data: {
    array: {
      name: '欧阳克',
      age: 18
    },
    object: [
      {
        name: '朱老师',
        age: 38
      },
      {
        name: '西门大官人',
        age: 28
      }
    ]
  },
  dynamic_array(e){
    this.data.array.name = '朱老师'
    this.setData({
      array : this.data.array
    })
  },
  dynamic_object(e){
    this.data.object[0].name = '欧阳克'
    this.setData({
      object: this.data.object
    })
  }
})
<view>姓名:{{array.name}}</view>
<view>年龄:{{array.age}}</view>
<button bindtap="dynamic_array">动态改变数组数据</button>
<view wx:for="{{object}}">
  <view>姓名:{{item.name}}</view>
  <view>年龄:{{item.age}}</view>
</view>
<button bindtap="dynamic_object">动态改变对象数据</button>

# 三、API作用域

  • 每个 API 有独立的作用域
Page({
  data: {
    name : '欧阳克'
  },
  onLoad(){
    wx.getSystemInfo({
      success(res) {
        // 在api里使用 文件this就会报错
        console.log(this.data.name);
      }
    })
  },
  onShow(){
    // 先把文件this存到新变量中
    var that = this;
    wx.getSystemInfo({
      success(res) {
        console.log(that.data.name);
      }
    })
  }
})
Name:
<提交>