我尝试在运行时(而不是设计时)创建一个多选组件。下面是我尝试的示例代码。
我的多选选项:
const regions = ref([
{ label: 'Queensland', value: 'QLD' },
{ label: 'New South Wales', value: 'NSW' },
{ label: 'Victoria', value: 'VIC' },
{ label: 'Tasmania', value: 'TAS' },
{ label: 'South Australia', value: 'SA' }]);
我的动态零部件创建如下:
const generateMultiSelectDynamically = (field: string) => {
var el = document.createElement("div"); //create container for the app
el.style.display = "inline"
let selectedRegions = ref();
var componentApp = createApp(
MultiSelect, {
maxSelectedLabels:1,
options: regions.value,
optionLabel:(v: any) => `${v.label}`,
placeholder: `region`,
name: `region`,
multiple:true,
filter:true,
// modelValue: selectedRegions
});
componentApp.use(PrimeVue); // Using PrimeVue
componentApp.mount(el); //mount to DOM
document.getElementById(field)!.appendChild(el);
document.getElementById(field)!.appendChild(document.createTextNode(' '))
}
为了查看选项是否正确显示,我临时注解掉了 modelValue。这将正确显示选项,如下所示。
但是如果我绑定它(取消注解绑定代码),然后单击多选,我会收到下面的错误。
类型错误:此. modelValue.some不是函数
所以,不知怎么的绑定不正确。我做错了什么?
已尝试将ref()、ref([])作为 selectedRegions,但没有成功。
1条答案
按热度按时间eivgtgni1#
这一个成功了,当我们动态创建控件时,双向数据绑定实际上并没有发生(即使在设计时也能正常工作)。
***selectedRegions***需要是数组的引用
***modelValue***需要是ref变量的值(这是ref变量的规则)。
并且需要在***onChange***事件中设置选择。
***splice***用于清除模型,因为每个click事件只带有选中的项目。清除后,我们将值推送到模型中。
因此,整个代码如下所示。