自定义组件才出来没多久,感觉解决了很多的问题,不过刚开始用不免遇到边边角角的问题,希望大家都可以在这个帖子统一记录问题和解决方法,方便快速查找问题。
楼主先来遇到的问题和解决方法:
在引用组件时在页面的 json 文件中进行配置。
{ "usingComponents": { "component-tag-name": "path/to/the/custom/component" } } |
这里的组件名称是随便取得名字;
后面的组件路径使用相对路径,不需要加后缀名称。如: ../test/test
2. 按照官网自定义组件写法但没有成功显示??
首先检查下开发工具使用的基础库版本。官网说明要 1.6.3 才能使用自定义组件,在更新1.6.3 版本时间节点之前创建的项目默认基础库是不会自动设置为 1.6.3 的,这个要注意一下。
设置方式:开发工具右上角 > 详情 > 项目设置 > 基础库版本。
网友回复:
父子组件,兄弟组件的数据通信问题怎么解决的?
用自定义控件时出现了,VM1664:2 TypeError: Cannot read property '__wxspec__' of null,
1. 父子组件交互
1)父组件往子组件传值
< children-comp inner-text = "Some text" ></ children-comp > |
2)子组件接收父组件的值
在子组件 .js 文件中用 properties 属性接收父组件传来的值,这个和官网文档里的用法是一样的啊。 刚测试了一下确实也是可以的,不管是页面调用组件还是组件调用组件都是这种写法。
2.至于你说的兄弟组件,这种没想到具体应用场景。
3.另外,测试过程中发现一个问题:这里的组件名称不能包含数字,否则控制条会报错。如:写成component-tag-name2 就会报错。
{ "usingComponents": { "component-tag-name": "path/to/the/custom/component" } } |
不能包含数字是文档说的 名字这些都是只能用小写字母和下划线的 我用数字也错
哈哈,好吧,我看的不够仔细。
怎么还是不行
就是按照这个步骤来的
子组件向父组件怎么传的数据??
我测试了下成功了,demo 如下:
1. 组件 price.wxml
<input class="inputStyle" value="{{num}}" type="number" bindinput='onCompInputChange'/>
2. 组件 price.js
Component({
methods: {
onCompInputChange: function (e) {
console.log('comp input method')
console.log(e.detail.value)
this.triggerEvent('input', e.detail) // 只会触发 pageEventListener2
}
}
})
3. 页面 index.wxml
<price num="{{2}}" min="{{1}}" bindinput="onPageInputChange"/>
4. 页面 index.js
Page({
onPageInputChange: function (e) {
console.log('page input method')
console.log(e.detail.value)
}
})
总结:
a. 组件和页面的 .wxml 事件名称要相同,比如我这里都是 bindinput,试了下自定义事件没有成功;
b. 页面 index.js 中事件 onPageInputChange 的参数 e 来源于组件 price.js 中 this.triggleEvent 的第二个参数,而且这里必须要是 e.detail,写 e 的话传过去的值只能是 undefined。
事件名称也要相同?
你这个triggerEvent的事件名都没有在父组件出现啊?。。。