Я фильтрую проекты с таким вычисленным свойством:

filtered_projects() {
    return this.projects.filter( (project)  =>  {
        return project.title.toLowerCase().indexOf(this.project_filter.toLowerCase()) !== -1
    })
}

Когда я добавляю новый проект с помощью этого

submitNewProject() {
   let path = '/api/projects';
   Vue.http.post(path, this.project)
       .then( (rsp) => {
          this.projects.push(rsp.data);
          this.project = this.getSingleProject();
          this.create_project = false;
          return true;
    });
 }

Это вызывает ошибку, которую я не могу найти

TypeError: Невозможно прочитать свойство 'toLowerCase' из неопределенного

3
jgravois 26 Ноя 2016 в 21:09

2 ответа

Лучший ответ

Возможно, вы неправильно передаете данные проектов в массив проектов.

Во-первых, vue-resource теперь использует body, а не данные для получения ответа, поэтому вам может потребоваться использовать:

this.projects.push(rsp.body)

Тогда это даст вам один элемент массива, содержащий все проекты, которые не выглядят так, как вы хотите. Я считаю, что вместо этого вам нужно:

this.projects = rsp.body

Предполагая, что тело ответа представляет собой массив объектов, это позволит:

this.projects.filter(project => {})

Работать как положено. Значение project.title теперь должно быть действительным

< Сильный > ИЗМЕНИТЬ

Чтобы заголовок проекта был установлен в нижний регистр, вы должны возвращать объект с параметром заголовка, т.е.

rsp.body = {
  title: 'FOO',
}

Которые вы затем установите в массиве проектов с помощью:

this.projects.push(rsp.body)

Поэтому первое, что нужно исправить, - это ваш ответ, отсортируйте конечную точку, чтобы она возвращала то, что вы ожидаете, тогда остальная часть приведенного выше кода должна работать

1
GuyC 26 Ноя 2016 в 19:05

Вам нужно сохранить "this" перед Vue.http.post (self = this), а затем в обратном вызове изменить this.projects на self.projects. Пояснение: Как получить доступ к правильному контексту `this` внутри обратного вызова?

0
Community 23 Май 2017 в 11:52