我正在使用vue-apollographql-tag构造一个GraphQL查询.

如果我对想要的ID进行硬编码,它可以工作,但我希望将当前路由ID作为变量传递给Vue Apollo.

Does work(硬编码ID):

  apollo: {
    Property: {
      query: PropertyQuery,
      loadingKey: 'loading',
      variables: {
        id: 'my-long-id-example'
      }
    }
  }

然而,我无法做到这一点:

Doesn't work(try 访问此.ID为$route):

  apollo: {
    Property: {
      query: PropertyQuery,
      loadingKey: 'loading',
      variables: {
        id: this.$route.params.id
      }
    }
  }

我得到了一个错误:

未捕获的TypeError:无法读取未定义的属性"params"

有什么办法吗?

EDIT:完整的脚本块,以便更容易地查看发生了什么:

<script>
import gql from 'graphql-tag'

const PropertyQuery = gql`
  query Property($id: ID!) {
    Property(id: $id) {
      id
      slug
      title
      description
      price
      area
      available
      image
      createdAt
      user {
        id
        firstName
        lastName
      }
    }
  }
`

export default {
  name: 'Property',
  data () {
    return {
      title: 'Property',
      property: {}
    }
  },
  apollo: {
    Property: {
      query: PropertyQuery,
      loadingKey: 'loading',
      variables: {
        id: this.$route.params.id // Error here!
      }
    }
  }
}
</script>

推荐答案

阅读vue apollo的documentation(参见react 参数部分),您可以通过使用this.propertyName来使用vuereact 属性.所以只需将路由参数初始化为数据属性,然后在apollo对象中使用它,如下所示

export default {
  name: 'Property',
  data () {
    return {
      title: 'Property',
      property: {},
      routeParam: this.$route.params.id
    }
  },
  apollo: {
    Property: {
      query: PropertyQuery,
      loadingKey: 'loading',
         // Reactive parameters
      variables() {
        return{
            id: this.routeParam
        }
      }
    }
  }
} 

Vue.js相关问答推荐

在Nuxt项目中混合Scrolltrigger与Lenis

使用计算(computed)属性更改视图

:deep() 带有嵌套 scss 规则的语法

Vue3如何将自定义事件绑定到路由视图中的特定组件?

使用 Vue.js 清除数组内容和react性问题

两个div元素之间的vue2过渡

如何在vue中动态加载组件

无需直接 DOM 操作即可绘制d3-axis

为什么组件在 v-if 下没有被销毁

为什么Vue.js 使用单字标签

在基于 TypeScript 的 Vue 中将 vuex 状态和Mutations绑定到复选框组件属性

为什么 CSS 关键帧动画在具有范围样式的 Vue 组件中被 destruct ?

怎样1秒后自动隐藏VueJS中的元素

Nuxt 打开链接到模态

如何在 NPM 上创建和发布 Vuejs 组件

Vue:如何在按钮单击时调用 .focus()

Vue 组件中的组件渲染函数中可能存在无限更新循环警告

Vuetify 数据表不显示数据

Vuex 模块Mutations

Mapbox 事件监听器