Хранить данные в локальном хранилище

#vue.js #vuetify.js

#vue.js #vuetify.js

Вопрос:

У меня есть этот компонент для создания рецепта, но я хочу сохранить данные в локальном хранилище. Когда я печатаю «recipeData», он печатается на консоли. Например, я ввожу название рецепта и его описание и т. Д., И я печатаю данные в консоли, и введенные мной элементы печатаются, но когда я печатаю «recipeData.title», печатается, что он не определен. И когда я хочу сохранить recipeData в локальном хранилище, он не сохраняет его. Как я могу решить проблему?

 <template>
  <v-app>
    <v-container>
      <v-layout row>
        <v-flex xs12 sm6 offset-sm3>
          <h2 class="btn-style">Create Recipe</h2>
        </v-flex>
      </v-layout>
      <v-layout row>
        <v-flex xs12>
          <form @submit.prevent="onCreateRecipe">
            <v-layout>
              <v-flex xs12 sm6 offset-sm3>
                <v-text-field
                  name="title"
                  label="Title"
                  id="title"
                  v-model="title"
                  color="#43A047"
                  required
                >
                </v-text-field>
              </v-flex>
            </v-layout>
            <v-layout>
              <v-flex xs12 sm6 offset-sm3>
                <v-text-field
                  name="imageUrl"
                  label="ImageUrl"
                  id="imageUrl"
                  v-model="imageUrl"
                  color="#43A047"
                  required
                >
                </v-text-field>
              </v-flex>
            </v-layout>
            <v-layout>
              <v-flex xs12 sm6 offset-sm3>
                <img :src="imageUrl" height="300px" />
              </v-flex>
            </v-layout>
            <v-layout>
              <v-flex xs12 sm6 offset-sm3>
                <v-text-field
                  name="description"
                  label="Description"
                  id="description"
                  v-model="description"
                  color="#43A047"
                  multi-line
                  required
                >
                </v-text-field>
              </v-flex>
            </v-layout>
            <v-layout>
              <v-flex xs12 sm6 offset-sm3>
                <v-text-field
                  name="ingredients"
                  label="Ingredients"
                  id="ingredients"
                  v-model="ingredients"
                  color="#43A047"
                  multi-line
                  required
                >
                </v-text-field>
              </v-flex>
            </v-layout>
            <v-layout row>
              <v-flex xs12 sm6 offset-sm3>
                <v-btn
                  class="green darken-1 color"
                  :disabled="!formIsValid"
                  type="submit"
                >
                  Create Redcipe
                </v-btn>
              </v-flex>
            </v-layout>
          </form>
        </v-flex>
      </v-layout>
    </v-container>
  </v-app>
</template>

<script>
export default {
  data() {
    return {
      title: "",
      imageUrl: "",
      description: "",
      ingredients: "",
    };
  },
  computed: {
    formIsValid() {
      return (
        this.title !== "" amp;amp;
        this.description !== "" amp;amp;
        this.imageUrl !== "" amp;amp;
        this.ingredients != ""
      );
    },
  },
  methods: {
    onCreateRecipe() {
      if (!this.formIsValid) {
        return;
      }
      const recipeData = {

        title: this.title,
        description: this.description,
        imageUrl: this.imageUrl,
        ingredients: this.ingredients,
      };
      console.log(recipeData)
      console.log("The Local Storage" localStorage.setItem(this.recipeData));
  
    }
  }

  
};
</script>

<style scoped>
.btn-style {
  color: #43a047;
}

.color {
  color: #fafafa;
}
</style>
  

Ответ №1:

чтобы сохранить данные localStorage , вы должны сначала определить имя хранилища, а затем данные.

localStorage.setItem('storageName', recipeData)

чтобы просмотреть данные localStorage .

console.log(localStorage.getItem('StorageName'))

узнать больше https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

и в этом нет необходимости this.recipeData , потому что вы объявляете переменную в функции. чтобы получить достаточно данных с recipeData

Ответ №2:

Локальное хранилище представляет собой структуру данных типа ключ-значение, в качестве первого параметра необходимо указать ключ, который будет использоваться для извлечения данных из хранилища. Это синтаксис localStorage.setItem(keyName, keyValue);

Кроме того, их необходимо сохранять и извлекать в виде строки, упорядочивая ее при сохранении и разбирая при получении.

Ваш код для сохранения объекта должен быть таким:

 localStorage.setItem('recipeDataKey', JSON.stringify(this.recipeData));
  

и для извлечения:

 const recipeData = JSON.parse(localStorage.setItem('recipeDataKey'));