vuetify — изменение параметров v-выбора в зависимости от состояния кнопки

#javascript #vuetify.js

Вопрос:

Поэтому я пытаюсь сделать так, чтобы в селекторе были разные элементы в зависимости от состояния кнопки, которая уже меняется между включенной и отключенной. Я пытался использовать v-if и v-else, но я чувствую, что это неправильный способ, и он также не работал. Я чувствую, что это ближе к тому, что мне нужно использовать, но не уверен, что делаю это правильно. ниже приведен html-код

 lt;v-col class="col-3"gt;  lt;v-select  :items="rulesForOptionsLevel"  outlined  dense  :disabled="  accountFeatures.optionsTrading === 'Disabled' ? true : false  "  v-model="accountFeatures.optionsLevel"  @change="changeOptionsLevel"  :menu-props="{ top: true, offsetY: true }"  label="Level"  gt;lt;/v-selectgt;  lt;/v-colgt;  

это сценарий ниже. Также в скрипте я сделал элементы[] пустыми в данных

 methods: {  rulesForOptionsLevel() {  if (accountFeatures.equityTrading === "Disabled") {  items: ["unavailable", "optionsLevel1", "optionsLevel2"];  } else {  items: [  "unavailable",  "optionsLevel1",  "optionsLevel2",  "optionsLevel3",  "optionsLevel4",  "optionsLevel5",  "optionsLevel6",  ];  }  },  

Ответ №1:

Просто измените rulesForOptionsLevel метод на вычисляемое свойство.

 Vue.config.productionTip = false; Vue.config.devtools = false;  new Vue({  el: "#app",  vuetify: new Vuetify(),  data() {  return {  accountFeatures: {  optionsTrading: "disabled",  optionsLevel: "",  equityTrading: "Disabled"  }  };  },  methods: {  changeOptionsLevel() {  console.log('Options changed!');  },  toggleEquityTrading(){  if(this.accountFeatures.equityTrading=="Enabled")  this.accountFeatures.equityTrading = "Disabled";  else  this.accountFeatures.equityTrading = "Enabled";  console.log(`accountFeatures.equityTrading: ${this.accountFeatures.equityTrading}`);  }  },  computed: {  rulesForOptionsLevel() {  if (this.accountFeatures.equityTrading === "Disabled")  return ["unavailable", "optionsLevel1", "optionsLevel2"];  else  return [  "unavailable",  "optionsLevel1",  "optionsLevel2",  "optionsLevel3",  "optionsLevel4",  "optionsLevel5",  "optionsLevel6",  ];   },  }, }); 
 lt;link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet"gt; lt;link href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css" rel="stylesheet"gt; lt;link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet"gt; lt;script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"gt;lt;/scriptgt; lt;script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"gt;lt;/scriptgt; lt;div id="app"gt;  lt;v-appgt;  lt;v-col class="col-3"gt;  lt;v-select :items="rulesForOptionsLevel" outlined dense :disabled="accountFeatures.optionsTrading === 'Disabled' ? true : false" v-model="accountFeatures.optionsLevel" @change="changeOptionsLevel" :menu-props="{ top: true, offsetY: true }" label="Level"gt;lt;/v-selectgt;  lt;/v-colgt;  lt;v-btn elevation="2" @click="toggleEquityTrading()"gt;Toggle Equitylt;/v-btngt;  lt;/v-appgt; lt;/divgt; 

Комментарии:

1. Спасибо! Это определенно отвечает тому, как я пытался сделать это раньше. Я обнаружил, что вы также можете сделать это с помощью того, как я написал выше. Считаете ли вы, что либо это лучший способ решить эту проблему, либо не имеет значения, какой метод используется?

2. Я считаю computed , что свойство для заполнения элементов во время выполнения-это правильный путь. вычисляемые свойства, как вы знаете, кэшируются и изменяются только при изменении значений, к которым они привязываются. С другой стороны, выражения и методы всегда оцениваются. Кроме того, я заметил, что вы создали два отдельных массива для сохранения различных значений элементов, что было действительно неуместно.

3. Я понимаю. Спасибо вам за объяснение разницы и за ваш ответ!

Ответ №2:

понял это. Нет необходимости в функции, вы можете просто использовать тот же метод, что и для чего-то вроде отключено. Если эта учетная запись имеет значение.маржа отключена, то она выбирает товары, а если нет, то она выбирает товары2

 ] lt;v-select  :items="accountFeatures.margin === 'Disabled' ? items : items2"  outlined  dense  :disabled="  accountFeatures.optionsTrading === 'Disabled' ? true : false  "  v-model="accountFeatures.optionsLevel"  @change="changeOptionsLevel"  :menu-props="{ top: true, offsetY: true }"  label="Level"  gt;lt;/v-selectgt;