小程序游戏怎么绑定网站-如何在Momo小程序中实现单向绑定

1. 双向绑定

如何在Momo小程序中实现单向绑定? 在开始之前,我先介绍一下什么是单向绑定。 在js中定义变量数据后,通过{{}}绑定到模板。 这个过程是双向绑定的,即数据更新只能在js中更新。 ,遵循模板中的更改。 并且如果模板中的数据发生变化,js中对应的变量数据也会跟着变化,这就是单向绑定。

1、vue2中单向绑定的实现

表单元素绑定:

官网说明:

数据的单向绑定主要通过v-model指令实现小程序游戏怎么绑定网站,示例如下:

	
	<input type="radio" v-model="picked" value="a">
	
	
	<input type="checkbox" v-model="toggle">
	
	
	<select v-model="selected">
	  <option value="abc">ABC</option>
	</select>

自定义组件绑定:

官网说明:

通过v-model绑定,组件需要声明changestorm和valueprop,当数据发生变化时,以$emit('change', value)的形式实现数据变化的通知,valueprop用于接收父组件Update参数。

默认情况下,组件上的 v-model 将使用名为 value 的 prop 和名为 input 的storm,并且单选按钮、复选框等输入控件可能会出于不同目的使用 valueattribute。

具体例子如下:

Vue.component('base-checkbox', {
  model: {
    prop: 'checked',
    event: 'change'
  },
  props: {
    checked: Boolean
  },
  template: `
    
  `
})

使用时通过v-model进行绑定:

<base-checkbox v-model="lovingVue"></base-checkbox>

2、vue3中单向绑定的实现

表单元素绑定:

官网说明:

vue3中表单元素的绑定与vue2类似,具体请参考上面的链接。

您可以使用 v-model 指令在表单和元素上创建单向数据绑定。 它根据控件类型手动选择正确的方式来更新元素。 虽然有点神奇,但 v 模型本质上只不过是语法糖。 它负责监听用户的输入来更新数据,并针对一些极端场景做一些特殊处理。

自定义组件绑定:

官网说明:

和vue2中的使用方法类似,有一个区别是‘update:modelValue’在storm的时候接收到一个‘modelValue’的参数,这一点和vue2不同。

为了使这个示例实际工作,需要在组件内部完成两件事:

当输入新值时,将内部原生输入元素的valueattribute绑定到modelValueprop上小程序游戏怎么绑定网站,并在输入元素上触发update:modelValuestorm 3、小程序中简单的单向绑定

官网说明:

只能使用单个数组进行单向绑定,复杂的对象很难绑定:

用于单向绑定的表达式具有以下限制:

只能是单个数组的绑定,比如

是非法的;

目前数据路径尚不可用,如

目前不支持此类表达式

组件中的更新数据需要通过this.setData来更新。 另请注意,绑定值的类型必须对应,否则无法触发单向绑定数据的更新。

一个简单的绑定示例如下:

父组件

<child model:value="{{value}}"></child>

Page({
	/**
	 * 页面的初始数据
	 */
	data: {
		value: '测试1'
	},
})

{
  "usingComponents": {
	  "child":"/components/test/child"
  }
}

组件

<view>value内容:{{value}}</view>
<button bindtap="updateValue">更新数据</button>

Component({
	/**
	 * 组件的属性列表
	 */
	properties: {
		value: String
	},
	/**
	 * 组件的初始数据
	 */
	data: {
	},
	/**
	 * 组件的方法列表
	 */
	methods: {
		updateValue() {
			this.setData({
				value: '测试222'
			});
		}
	}
})

二、问题

如果Momo小程序中绑定的值是一个对象,使用单向绑定时会出现堆溢出异常:

父组件:

Page({
	/**
	 * 页面的初始数据
	 */
	data: {
		value: {
			id: 1,
			name: '测试1'
		}
	},
})	

<child model:value="{{value}}"></child>

组件:

/**
 * 组件的属性列表
 */
properties: {
	value: Object
},
/**
 * 组件的初始数据
 */
data: {
},
/**
 * 组件的方法列表
 */
methods: {
	updateValue() {
		this.setData({
			value: {
				id: 2,
				name:'测试'
			}
		});
	}
}

<view>value内容:{{value}}</view>
<button bindtap="updateValue">更新数据</button>

异常的:

VM414 WAService.js:1 RangeError: Maximum call stack size exceeded
    at Function.i.safeCallback (VM414 WAService.js:1)
    at l.<anonymous> (VM414 WAService.js:1)
    at c.doUpdates (VM414 WAService.js:1)
    at $n (VM414 WAService.js:1)
    at fi (VM414 WAService.js:1)
    at gi (VM414 WAService.js:1)
    at fi (VM414 WAService.js:1)
    at Di._updateValues (VM414 WAService.js:1)
    at Di.updateValues (VM414 WAService.js:1)
    at c._updateCb (VM414 WAService.js:1)

详情如下:

3. 程序

可以通过 JSON.stringify 将对象转换为字符串进行绑定。 如果子组件需要使用对象,请使用 JSON.parse 进行转换。 具体示例如下:

父组件

<child model:value="{{value}}"></child>

Page({
	/**
	 * 页面的初始数据
	 */
	data: {
		value: JSON.stringify({
			id: 1,
			name: '测试1'
		})
	},
})

组件


<view>value内容:{{value}}</view>
<button bindtap="updateValue">更新数据</button>

// components/test/child.js
Component({
	/**
	 * 组件的属性列表
	 */
	properties: {
		value: String
	},
	/**
	 * 组件的初始数据
	 */
	data: {
	},
	/**
	 * 组件的方法列表
	 */
	methods: {
		updateValue() {
			this.setData({
				value: JSON.stringify({
					id: 2,
					name:'测试222'
				})
			});
		}
	}
})

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 网站程序 小程序游戏怎么绑定网站-如何在Momo小程序中实现单向绑定 https://www.wkzy.net/game/152299.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务