Vuetify v-select not showing :items



我无法弄清楚这一点。我正在使用 Vuetify 来设置我的页面样式,但由于某种原因,我无法将数据显示在我的v-select选择框中。数据应该来自数组marketplaces。我以为这可能是版本问题,但我已经升级了所有内容,但它仍然无法正常工作。我无法让冷冰冰的东西显示我的数据!

这是页面:

<template>
<v-container fluid grid-list-lg class="come_closer">
<v-layout row wrap>
<v-flex xs12>
<v-card class="lightpurple">
<v-card-title>
<v-icon class="my_dark_purple_text">language</v-icon>
<h1 class="title oswald my_dark_purple_text pl-2 pr-5">ENTER YOUR AMAZON CREDENTIALS BELOW</h1>
</v-card-title>
<v-form ref="form" v-model="valid">   
<v-layout xs12 row wrap class="mx-auto">
<v-flex xs12>
<v-text-field
required
:error-messages="sellerIdErrors"
color="purple darken-3"
label="Amazon Seller Id"
v-model="seller_id"
prepend-icon="person"
@input="$v.seller_id.$touch()"
@blur="$v.seller_id.$touch()"
></v-text-field>
</v-flex>
<v-flex xs12>
<v-select
required
:items="marketplaces"
label="Select your Amazon Marketplace"
:error-messages="marketplaceErrors"
v-model="selected_marketplace"
color="purple darken-3"
prepend-icon="map"
@input="$v.selected_marketplace.$touch()"
@blur="$v.selected_marketplace.$touch()"                  
></v-select>
</v-flex>
<v-flex xs12>
<v-text-field
required
color="purple darken-3"
id="testing"
name="input-1"
label="Amazon Auth Token"
:error-messages="tokenErrors"
v-model="token"
prepend-icon="https"
@input="$v.token.$touch()"
@blur="$v.token.$touch()"                      
></v-text-field>
</v-flex>
<v-layout row wrap class="text-xs-center mx-auto" v-if="show_cancel_button">
<v-flex xs6>
<v-btn block large color="purple darken-3" dark @click="formCheckAndSend()">Update Your Credentials</v-btn>
</v-flex>
<v-flex xs6>
<v-btn block outline large color="purple darken-3" dark @click="sendBackToSpeeds">Cancel</v-btn>
</v-flex>
</v-layout>
<v-layout row wrap class="text-xs-center mx-auto" v-else>
<v-flex xs12>
<v-btn block large color="purple darken-3" dark @click="formCheckAndSend()">Save Your Credentials</v-btn>
</v-flex>
</v-layout>  
</v-layout>
</v-form>
</v-card>
</v-flex>
<div class="text-xs-center">
<v-bottom-sheet inset v-model="error_sheet">
<v-card dark color="red darken-1">
<v-card-title>
<h1 v-if="credentials_bad" key="bad_creds" class="headline pb-2 oswald mx-auto">{{bad_credentials}}</h1>
<h1 v-if="credentials_bad" key="video" class="title oswald mx-auto">{{watch_video}}</h1>
</v-card-title>
</v-card>  
</v-bottom-sheet>
</div>
</v-layout>
</v-container>
</template>
<script>
import {dataShare} from '../packs/application.js';
import axios from 'axios';
import { required } from 'vuelidate/lib/validators';
export default {
validations: {
seller_id: { required },
selected_marketplace: { required },
token: { required },
selected_zones: { required }
},
data: function() {
return {
show_cancel_button: true,
credentials_bad: false,
bad_credentials: "Oh no! Your Amazon credentials aren't right. Can you try again?",
watch_video: "Make sure to watch our video in the top right hand corner",
valid: true,
error_sheet: false,
seller_id: '',
token: "",
selected_zones: [],
selected_marketplace: null,
counter: 1,
subtractor: 1,
wrapCounter: 1,
marketplaces:[
{ text: 'Australia', value: "A39IBJ37TRP1C6" },
{ text: 'Canada', value: "A2EUQ1WTGCTBG2" },
{ text: 'France', value: "A13V1IB3VIYZZH" },
{ text: 'Germany', value: "A1PA6795UKMFR9" },
{ text: 'Italy', value: "APJ6JRA9NG5V4" },
{ text: 'Mexico', value: "A1AM78C64UM0Y8" },
{ text: 'Spain', value: "A1RKKUPIHCS9HS" },
{ text: 'United Kingdom', value: "A1F83G8C2ARO7P" },
{ text: 'United States', value: "ATVPDKIKX0DER" },          
],
};
},
created() {
let self = this;
axios.get("https://shopify-ship-refactor-trimakas.c9users.io/return_amazon_credentials").then(response => {
this.seller_id = response.data.seller_id;
if(this.seller_id == ""){
this.show_cancel_button = false;
}
this.show_cancel_button;
this.selected_marketplace = response.data.marketplace;      
this.token = response.data.auth_token;
});
},
computed: {
sellerIdErrors() {
const errors = []
if (!this.$v.seller_id.$dirty) return errors
!this.$v.seller_id.required && errors.push('Please enter your Amazon Seller Id')
return errors      
},
marketplaceErrors() {
const errors = []
if (!this.$v.selected_marketplace.$dirty) return errors
!this.$v.selected_marketplace.required && errors.push('Please select your Amazon Marketplace')
return errors      
},
tokenErrors() {
const errors = []
if (!this.$v.token.$dirty) return errors
!this.$v.token.required && errors.push('Please enter your Amazon Auth Token')
return errors      
},
zoneErrors() {
const errors = []
if (!this.$v.selected_zones.$dirty) return errors
!this.$v.selected_zones.required && errors.push('Please choose atleast one shipping zone to add this rate too')
return errors      
},      
},
methods: {
formCheckAndSend () {
if(this.$refs.form.validate()) {
this.sendAmazonCreds();
}
},
sendBackToSpeeds() {
dataShare.$emit('whereToGo', "speeds");
},
removeCounter() {
dataShare.$emit('removeComponent', this.subtractor);
},
addCounter() {
this.counter++;
dataShare.$emit('addComponent', this.counter);
var allWraps = document.getElementsByClassName("application--wrap");
var classToRemove = allWraps[this.wrapCounter];
classToRemove.classList.remove("application--wrap");
this.wrapCounter++;
},
sendAmazonCreds() {
const AmazonCreds = {
seller_id: this.seller_id,
marketplace: this.selected_marketplace,
auth_token: this.token,
};
let self = this;
axios.post("https://shopify-ship-refactor-trimakas.c9users.io/amazon_credentials_check", AmazonCreds).then(response => {
var creds_status = response.data.are_the_amazon_creds_good;
if(creds_status == true){
dataShare.$emit('whereToGo', "speeds");
this.sendZones();
}
if(creds_status == false){
self.error_sheet = true;
self.credentials_bad = true;
}
});
},
sendZones() {
const SelectedZones = {
zone_info: this.selected_zones
};
axios.post("https://shopify-ship-refactor-trimakas.c9users.io/receive_zone_info", SelectedZones); 
}
}
};  
</script>
<style>
.chip__content {
background-color: #68007d !important;
color: white !important;
}
.come_closer {
margin-top: -15px !important; 
}
</style>

上面的页面是这个页面中的一个组件:

<template>
<v-app>
<credential_instructions class="no_background"></credential_instructions>
<credential_details
xs12
class="no_background"
id="amazon_credentials"
v-for="(item, index) in components"
:index="index"
:key="'fourth' + index "
>
</credential_details>
</v-app>  
</template>
<script>
/*global top*/
import {dataShare} from '../packs/application.js';
import credential_instructions from '../components/credential_instructions.vue';
import credential_details from '../components/credential_details.vue';
import axios from 'axios';
export default {
data: function() {
return {
components: [1],
};
},
components: {
credential_instructions,
credential_details
},
created() {
dataShare.$on('addComponent', (data) => {
this.components.push(data);
});
dataShare.$on('removeComponent', (data) => {
this.components.pop();
});
},
methods: {
sendToBilling() {
axios.post('https://new-ship-trimakas.c9users.io/create_billing_plan').then(response => {
console.log(response.data);
top.location.href = response.data.url_redirect;
});
}
}
};  
</script>
<style>
.dark-green-button {
background-color: #43A047 !important;
}
.green-font {
color: #43A047 !important;
}
.red-font {
color: #E53935 !important;
}
.full-height .flex{
display: flex !important; 
}
.full-height .flex > .card{
flex: 1 1 auto !important; 
}

.textfield-background-beige {
background-color: #f7f1ec !important;
}
.theme--light .input-group input:disabled {
color: rgba(0,0,0,.87) !important;
}
.lightbeige {
background-color: #f1e7df !important;
}
.lightblue {
background-color: #d9d6e1 !important;
}
.lightpurple {
background-color: #e9daea !important;
}
.match-to-text-field {
margin-left: -17px !important;
height: 46px !important;
margin-top: 2px !important;
}
</style>

最后是我的package.json

{
"name": "shopify-ship-refactor",
"version": "1.0.0",
"description": "Complete Shopify shipping app refactor",
"main": "index.js",
"author": "Todd",
"license": "MIT",
"dependencies": {
"@rails/webpacker": "3.5",
"axios": "^0.18.0",
"v-clipboard": "^2.0.1",
"vue": "^2.5.16",
"vue-loader": "^14.2.2",
"vue-router": "^3.0.1",
"vue-template-compiler": "^2.5.17",
"vuelidate": "^0.7.4",
"vuetify": "^1.0.19"
},
"devDependencies": {
"webpack-dev-server": "2.11.2"
}
}

我没有收到任何错误或警告,它只是应该在选择框中填充的数据不是。 有什么想法吗?

它发生的另一个原因是因为你的代码中没有<v-app></v-app>。 我的问题是这样。 再次添加它,解决了问题。

有关详细信息,请参阅Sumurai8在"V-menu的Vuetify问题"中的回答。

我相信,由于您要将对象数组传递给v-select组件,因此您需要告诉它要显示为文本的内容,并将其设置为值。

所以在你的情况下,它应该看起来像这样:

<v-select
required
:items="marketplaces"
item-text="text"
item-value="value"
label="Select your Amazon Marketplace"
:error-messages="marketplaceErrors"
v-model="selected_marketplace"
color="purple darken-3"
prepend-icon="map"
@input="$v.selected_marketplace.$touch()"
@blur="$v.selected_marketplace.$touch()"                  
></v-select>

他们在文档中有一个关于此的部分,但它在该页面上有点埋藏: 自定义项目和文本值

希望这有帮助。

为了将来参考,我在处理的代码库中也遇到了类似的问题,似乎组件"v-select"被一个名为 vue-select 的库覆盖了。

在安装文档中,他们展示了如何像这样注册那里的组件:

Vue.component('v-select', vSelect)

哇,这是一场噩梦。只花了大约一天的时间就找到了解决方案。希望如果您看到此内容,它也可以成为您的解决方案。

部分问题是我还收到了vue is installed twice错误和各种其他警告。

所以我找到了这篇文章: Vuetify bug

那么这篇文章:Webpacker配置更改

最后是这个: 网络包装程序自定义.js

这就是最终的结果。我在/config/webpack/custom.js中创建了custom.js,它看起来像这样:

module.exports = {
resolve: {
alias: {
vue$: 'vue/dist/vue.esm.js'
}
}
}

我还必须将environment.js更新为:

const { environment } = require('@rails/webpacker')
const vue =  require('./loaders/vue')
const customConfig = require('./custom')
environment.config.set('resolve.extensions', ['.foo', '.bar'])
environment.config.set('output.filename', '[name].js')
// Merge custom config
environment.config.merge(customConfig)
// Delete a property
environment.config.delete('output.chunkFilename')
environment.loaders.append('vue', vue)
module.exports = environment

这两个配置文件解决了我的问题。同样作为参考,我正在运行Vuetify 1.2.1Vue 2.5.17以及Rails和Ruby。

我面临着同样的问题。我用<v-app> </v-app>包装我的应用程序。我可以解决这个问题

请记住在 v-select 中使用以下方法:

item-text="SomeName">

item-value="SomeID">

由于我的解决方案是更改组件的名称。 我猜该组件与 vuetify 冲突,因为具有相同的名称。

Vue.component('v-selector', vSelect)
<v-selector :options="['Canada', 'United States']"></v-selector>

类似的东西。

你应该导入这一行

import vSelect from 'vue-select';

在要使用 v-select 的文件中

最新更新