Я не могу реализовать фильтр для своего массива в vue.js

#javascript #vue.js #vuejs2 #vue-component #vue-reactivity

#javascript #vue.js #vuejs2 #vue-компонент #vue-реактивность

Вопрос:

Я искал довольно долго, но, будучи новичком, я не могу найти ответ. Я хотел бы отфильтровать свой массив с идентификатором свойства, которое, по моему мнению, является неправильным синтаксисом. Спасибо за вашу помощь

Компоненты

 export default {
  props: ["user", "recette"],
  data() {
    return { email: this.$route.params.email };
  },
  components: {},
  methods: {},
  computed: {
    filteredItems: function () {
      return this.recette.filter((recettes) => {
        return recettes.cat_recetteId === 1;
      });
    },
  },
};
 

Вид

 <template>
  <div>
    <myrecette :recette="recette"/>
    <myfooter />
  </div>
</template>

<script>
import myrecette from "../components/recette";
import myfooter from "../components/myfooter";

export default {
  name: "",
  data() {
    return {
      recette: "",
      user: "",
    };
  },
  components: {
    myrecette,
    myfooter,
  },
  created: function() {
    this.axios.get("http://localhost:3000/recette/all_recette/").then((res) => {
      (this.recette = res.data.recette),
        this.axios
          .get(
            "http://localhost:3000/user/rec_user/"   this.$route.params.email
          )
          .then((res) => {
            this.user = res.data.user;
          });
    });
  },
};
</script>
<style scoped></style>
 

УЗЕЛ

 router.get("/all_recette", (req, res) => {
    db.recette
        .findAll({
            include: { all: true },
        })
        .then((recette) => {
            if (recette) {
                res.status(200).json({
                    recette: recette,
                });
            } else {
                res.json("il n'y a pas de recettes");

            }
        })
        .catch(err => {
            res.json(err);
        });
});
 

Вот мой полный код, а также маршрут моего узла.

Мой возврат ошибки

vue.runtime.esm.js?2b0e:619 [Предупреждение Vue]: ошибка при рендеринге: «Ошибка типа: this.recette.фильтр не является функцией»

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

1. пожалуйста, поделитесь своим сценарием целиком

Ответ №1:

Фильтр работает, сохраняя элементы, которые возвращаются true , поэтому, если вы хотите, чтобы все элементы имели cat_recetteId значение 1, вы бы изменили его на:

 computed: {
  filteredItems: function() {
    if (!this.recette) return [];
    return this.recette.filter((recettes) => {
      return recettes.cat_recetteId === 1;
    });
  },
},
 

Также рекомендуется использовать функцию со стрелкой в большинстве случаев внутри вычисляемого.

Ответ №2:

Ваша функция обратного вызова фильтра должна возвращать true или false . Вы 1) ничего не возвращаете и 2) присваиваете значение (=) вместо того, чтобы выполнять сравнение (==/===).

 computed: {
    filteredItems: function() {
      return this.recette.filter(function(recettes) {
        return recettes.cat_recetteId === 1;
      });
    },
  },