Vue не обновляет реквизиты компонента, загруженные вызовом API, в производственном режиме, но делает это в разработке - PullRequest
0 голосов
/ 14 июня 2019

У меня есть компонент-обертка, который предоставляет дочерним элементам вызовы API и сохраняет результат, и компонент списка, который показывает запрошенные элементы, переданные через prop.Проблема в том, что он показывает их в режиме разработки, но не в рабочем состоянии, хотя вызов API в обоих случаях работает нормально, а ответ правильный.

Оба режима я запускал в одной среде.Похоже, проблема реактивности.

Это код шаблона:

<vue-api>
  <vue-list-filter-synchronizer slot-scope="{ result, getPrograms }"
                                ...
                                @params-updated="getPrograms">
     ...
     <div class="content">
        <vue-list :items="result ? result.data : []"
                  .../>
     </div>
  </vue-list-filter-synchronizer>
</vue-api>

Компонент VueAPI:

const VueAPI = {
  data() {
    return {
      result: null,
      error: null,
      loading: false
    }
  },
  ...
  methods: {
    getPrograms(params) {
      this.query(services.getPrograms)([params]);
    },
    query(f) {
      return (args=[]) => {
        if (!this.loading) {
          this.loading = true;
          f(...args)
            .then(({ data }) => this.result = data)
            .catch(error => this.error = error)
            .finally(() => this.loading = false);
      }
    }
  },
  render() {
    return this.$scopedSlots.default(this.slotScope);
  }
}

Я ожидаю, что result.data в компоненте VueAPI будетотображается как элементы списка в разработке и в рабочих режимах, но только в режиме разработки.

1 Ответ

0 голосов
/ 17 июня 2019

Прежде всего, у моего vue.debug.js была старая версия, так что он работает с ней и не работает без нее.Когда я его обновил, проблема появляется и в режиме отладки.Во-вторых, проблема в том, что я использовал устаревший синтаксис для slot-scope.Когда я изменил его на синтаксис v-слота, все начинает работать как положено.

...