1.在Flow中使用Lightning Web Component(lwc)时,发现一个问题。给这个组件设置了一个输入参数,其值取自前一个Screen。第一次运行时,参数的值正确,但是如果这时退回前一个Screen,修改一下输入参数,然后再前进到这个lwc的Screen,发现lwc的输入参数值没有改变。

花了很多时间,最后才搞明白,原来只需将这个输入参数的类型设置成input,也就是在.js-meta.xml的property设置里,加上一个role="inputOnly"的属性,就可以了。

不过,比如在一个Screen里,既有lwc的标准控件如datetime picker,也有lwc,将标准控件的变量值作为lwc的输入参数,希望改变标准控件的值时,也同时改变lwc,好像做不到。原因大概是标准控件的变量值只有在Flow的导航事件发生时才赋值。而唯一能监测这个事件的只有通过validate(下面提到),而触发validate时,变量还没有赋值,所以无法检测。
 
2.在研究上面的问题时,有个副产品。在lwc的js里加个validate方法,可以实现前进到下一步时验证数据的合法性。这是validate的主要用法,但也可以利用它能在前进到下一步时触发这个特性,做些别的事,比如上传文件等。也就是说,将validate当作一个FlowNavigationNextEvent/FlowNavigationFinishEvent的监听器来使用。
另外validate方法触发时,返回isValid: false,会重新加载lwc,也就是重新触发connectedCallback方法。
 
3.使用lwc所提供的datatable,缺省是在每条记录前显示多选框(checkbox),如果要改成单选(radiobutton),只需加上属性max-row-selection="1"即可。不过,这样做的话,设置selectedRows属性,就不起作用了,也就是说,无法在datatable显示时,自动选中某列。这是lwc的datatable的缺陷。
 
05-27 01:12