https://stackblitz.com/edit/angular-tfvr23
在 ng-zorro-antd 中 TreeSelect树选择 中
当JAVA 做为后台 并且 后台返回树结构时,对于 isLeaf(标识结点是否为叶子结点的字段名) 是和 《阿里巴巴Java开发手册(详尽版).pdf》相冲突的
booean 字段无 is前缀
booean 字段有 is前缀
| Environment | Info |
|---|---|
| ng-zorro-antd | 7.3.3 |
| Browser | all |
Translation of this issue:
https://stackblitz.com/edit/angular-tfvr23
TreeSelect tree selection in ng-zorro-antd
When JAVA is backed up and the backstage returns to the tree structure, the isLeaf (the name of the field identifying whether the node is a leaf node) conflicts with the Alibaba Java Development Manual (detailed version).pdf.
Booean field without is prefix
Booean field has is prefix
| Environment | Info |
|---|---|
| ng-zorro-antd | 7.3.3 |
| Browser | all |

手册中不推荐使用 isXxx 是因为部分 Java 框架会将 isXxx 对应成属性 xxx,从而导致属性匹配失败的问题。
JavaScript 作为弱类型语言,可以直接设置属性而不用关心类型:
entity[propName] = whateverTypeValue;
对于 getter / setter 也与 java 不同,可以做到无感知:
Object.defineProperty(entity, 'propName', {
get() { ... },
set(val) { ... }
});
entity[propName] = whateverTypeValue;
JS 中不会遇到 java 的序列化问题,因而也不会严格要求是否使用 is 作为前缀。
反过来,JS 中有一些规范,在 Java 中也同样不适用。例如判断是否相等需要用 === 而不是 ==、null undefined delete 不推荐作为属性名等等。根据语言选择适合的规范就行了。
如果后端返回的数据不符合你的需求,转换只需要一句javascript代码
const listOfSampleData = [{leaf:true,data:1000},{leaf:false,data:100}];
const listOfConvertData = listOfSampleData.map(item=>{return{...item,isLeaf:item.leaf}});
如果后端返回的数据不符合你的需求,转换只需要一句javascript代码
const listOfSampleData = [{leaf:true,data:1000},{leaf:false,data:100}]; const listOfConvertData = listOfSampleData.map(item=>{return{...item,isLeaf:item.leaf}});
我知道这种可以,但是 这种操作是需要map一次,也就是遍历一次数据的,对于设计来说这些都是可以避免的。
手册中不推荐使用 isXxx 是因为部分 Java 框架会将 isXxx 对应成属性
xxx,从而导致属性匹配失败的问题。JavaScript 作为弱类型语言,可以直接设置属性而不用关心类型:
entity[propName] = whateverTypeValue;对于 getter / setter 也与 java 不同,可以做到无感知:
Object.defineProperty(entity, 'propName', { get() { ... }, set(val) { ... } }); entity[propName] = whateverTypeValue;JS 中不会遇到 java 的序列化问题,因而也不会严格要求是否使用
is作为前缀。反过来,JS 中有一些规范,在 Java 中也同样不适用。例如判断是否相等需要用
===而不是==、nullundefineddelete不推荐作为属性名等等。根据语言选择适合的规范就行了。
确实JS 是没必要强制要求这个,但是个人觉得,为了适配不同的规则应该可以自定义传入的数据的属性名,比如可以指定另外一个名字来作为isLeaf的替代品
Most helpful comment
手册中不推荐使用 isXxx 是因为部分 Java 框架会将 isXxx 对应成属性
xxx,从而导致属性匹配失败的问题。JavaScript 作为弱类型语言,可以直接设置属性而不用关心类型:
对于 getter / setter 也与 java 不同,可以做到无感知:
JS 中不会遇到 java 的序列化问题,因而也不会严格要求是否使用
is作为前缀。反过来,JS 中有一些规范,在 Java 中也同样不适用。例如判断是否相等需要用
===而不是==、nullundefineddelete不推荐作为属性名等等。根据语言选择适合的规范就行了。