gpt4 book ai didi

javascript - VueJS 在另一个组件中使用组件时遇到问题

转载 作者:行者123 更新时间:2023-11-30 14:28:12 25 4
gpt4 key购买 nike

我是 VueJS 的新手,已经花了大约 30 个小时来学习它。我现在无法在另一个组件中使用组件。我可能需要有人帮我解释一下。

在提问之前,先说明一下:

  1. 根据 Vue JS 官方网站:

We do not recommend that beginners start with vue-cli, especially if you are not yet familiar with Node.js-based build tools.

我是 JS-Framework 的新手,所以我选择下载 Vue.js 并将其绑定(bind)到我的 HTML 文件。

  1. 我只有html、js和css

对于那些不知道阅读所有代码的人,我将在这里简化我的问题。因为我认为当某人非常有经验时,他/她可能不需要阅读我的愚蠢代码:

基本上我已经定义了两个全局组件,假设是 component1 和 component2。在 HTML 中,我像这样使用 component1 来获取使用 JSON 数据自动构建的多个 div:

<div v-for="data in JSON">
<component1 v-bind:datainfo="data"></component1>
</div>

然后,我在组件 1 的模板中使用组件 2,如下所示:

template:`
<div v-for="somedata in JSON">
<component2 v-bind:datainfo2="data"></component2>
</div>
`

终于在component2中定义了一些方法,问题来了。所有这些(component2 中方法中的函数)都不会被定义,我从 Vue 收到警告说:

[Vue warn]: Property or method "each function in my methods in component2" is not defined on the instance but referenced during render.

所以我想知道我们是否可以将一个组件放在另一个组件中,或者我应该以其他方式这样做。但是如果我们可以在彼此内部使用多个组件,为什么我们不能在内部组件中定义一些方法,数据属性可以正常工作,但方法不行。

对于那些想阅读原始代码以理解我的问题的人,我会在这里发布:(原谅我糟糕的英语)

我遇到的问题是 Vue 不会定义另一个组件内部组件中的方法。

相关的HTML代码:

<div v-for="(layer, idx) in WMSLayersSource">
<wms-layer-select-group v-bind:layergroupinfo="layer"></wms-layer-select-group>
</div>

ma​​in.js 文件:

var wmsLayerSelectSingle = Vue.component('wms-layer-select-single', {
props:['singlelayerinfo'], // case-insensitive and don't use '-'
data: function() {
return {
opacitySingle: 'display: none',
}
},
method: {
layerClickSingle: function() {
if (this.opacitySingle == 'display: block') {
this.opacitySingle = 'display: none';
} else {
this.opacitySingle = 'display: block';
};
},
test: function() {
console.log('test');
}
},
template: `
<li class="singleLayer">
<input type="checkbox" />
<span v-on:click="layerClickSingle">
{{ singlelayerinfo.layers }}
</span>
<input class="opacity" v-bind:style="opacitySingle" min="0" max="1" step="0.1" value="1.0" type="range">
</li>
`
});

var wmsLayerSelectGroup = Vue.component('wms-layer-select-group', {
props: ['layergroupinfo'], // case-insensitive and don't use '-'
data: function() {
return {
displaySingle: '',//'display: none',
opacityGroup: '',
}
},
methods: {
layerClickGroup: function() {
console.log('layerClickGroup ');
if (this.displaySingle == 'display: block') {
this.displaySingle = 'display: none';
} else {
this.displaySingle = 'display: block';
};
},
},
created: function() {
console.log('Component wms-layer-select-group is created');
// hide the sublayers of a layer group and show the single layers if they don't belong to a group
if (this.layergroupinfo.groupName == "singleLayer") {
this.displaySingle = 'display: block';
} else {
this.displaySingle = 'display: none';
}
},
template: `
<div>
<li class="LayerGroup" v-if="layergroupinfo.groupName != 'singleLayer'">
<input type="checkbox" />
<span @click="layerClickGroup">
<b>{{ layergroupinfo.groupName }}</b>
</span>
</li>
<div v-for="(singleLayer, idx) in layergroupinfo.layerCollection" v-bind:style="displaySingle">
<wms-layer-select-single v-bind:singlelayerinfo="singleLayer"></wms-layer-select-single>
</div>
<hr/>
</div>
`
});

我对打字错误和不区分大小写等问题非常小心,并仔细检查了所有内容。因为我得到的 Vue 警告只是

[Vue warn]: Property or method "layerClickSingle" is not defined on the instance but referenced during render.

其他一切正常。所以我想知道为什么内部组件中的方法"layerClickSingle" 不起作用。

最佳答案

method: {
layerClickSingle: function() {
if (this.opacitySingle == 'display: block') {
this.opacitySingle = 'display: none';
} else {
this.opacitySingle = 'display: block';
};
},
test: function() {
console.log('test');
}
},

这应该是methods 而不是method

关于javascript - VueJS 在另一个组件中使用组件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51611334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com