- 当前 Bug 的表现(可附上截图)
使用自定义组件的时候,有时候需要将一个JS对象作为参数传递,会出现这样的使用方法:
第一种写法:
<comp1 obj="{{{a: 1, b: 2}}}"></comp1>
最外的两层花括号表明这是一个表达式,表达式的值是{a: 1, b: 2},但是这种写法在开发者工具上直接报错了。
第二种写法:
<comp1 obj="{{a: 1, b: 2}}"></comp1>
这是参考template的写法,只有两层花括号,但是也报错了。
第三种写法:
<comp1 obj="{{ {a: 1, b: 2} }}"></comp1>
这时候就能正常显示了,但这个和第一种写法有什么区别?我不认为加减一个空格会影响到表达式的表现才对。
同时,文档里template有一种写法:
<template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>
<template is="objectCombine" data="{{foo, bar}}"></template>
这种写法我认为是不是也有问题?两个花括号表示这是一个表达式的话,js里没有这样的表达式吧?...obj1, ...obj2, e: 5?foo, bar?这能是一个对象吗
文档里还有另一种写法:
<view wx:for="{{[zero, 1, 2, 3, 4]}}">{{item}}</view>
这个为什么就能正常了?这和第一种写法有什么区别?能在模板语法里构造数组,不能构造对象?
- 预期表现
这些表现我认为是冲突的,没有统一性。麻烦解答一下上面的问题哈
这是一个已知问题,我们会尽快进行修复。
麻烦说详细点
已知问题是说<comp1 obj="{{{a: 1, b: 2}}}"></comp1>和<comp1 obj="{{ {a: 1, b: 2} }}"></comp1>这个?修复是指的不要这里的空格也不会报错吗?
别的呢,<template is="objectCombine" data="{{...obj1, ...obj2, e: 5}}"></template>和<template is="objectCombine" data="{{foo, bar}}"></template>,这两种写法与Mustache 语法(双大括号)是冲突的,是设计如此吗?
对,理论上有没有空格不应该有区别。
嗯的了解了,我还有个别的问题,关于wx:key 的,也是框架方面的,你看看归你管不
https://developers.weixin.qq.com/community/develop/doc/00048e50f804980be488c4f5351000
我不认为这是BUG
那你认为这个是很正常的了?就应该是这种表现?
我觉得没毛病诶,component的值是根据properties配置传入的,跟template的值传入是有区别的,还有wx:for那里是循环,传入个数组没问题吧???
如果组件要传入对象,在data里面定义一个初始值传进去就好了
<comp1 obj="{{test}}" />
Page({
data: {
test: {
a: 1,
b: 2
}
}
})
<comp1 obj="{{{a: 1, b: 2}}}"></comp1>和<comp1 obj="{{[1, 2]}}"></comp1>的区别是什么?
<comp1 obj="{{{a: 1, b: 2}}}"></comp1>和<comp1 obj="{{ {a: 1, b: 2} }}"></comp1>的区别是什么?
这里既有bug,也有设计上的考虑欠佳。不管是自定义组件还是模板,语法都是模板语法,那就应该是一致的
还有,在wxml里,特殊字符没有一个转义的方式?比如我要显示一个小于号,只能写"{{'<'}}",不太方便吧
希望你看一下 ES6的语法 展开运算符 ...obj
来,打开你的控制台,贴一下这段:...obj1, ...obj2, e: 5
你不是加了个花括号?没看到上面问题里很重要的一个地方就是两个花括号和三个花括号?你再仔细看看?再想想再来回答?
https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/data.html
数据绑定使用 Mustache 语法(双大括号)将变量包起来
也就意味着双大括号里面的就是变量,所以按照这个设计,
的正确写法应该是