为啥设置方法中的“route.params.id”不可用/未定义?

Posted

技术标签:

【中文标题】为啥设置方法中的“route.params.id”不可用/未定义?【英文标题】:Why is 'route.params.id' unavailable/undefined in setup method?为什么设置方法中的“route.params.id”不可用/未定义? 【发布时间】:2021-11-13 12:47:20 【问题描述】:

我正在使用 vue-router 和 Vue 3。我有一个视图,我想在其中获取路由器 url 并使用它来调用方法来访问 API。这个方法返回一个我可以用来填充我的页面的承诺。当使用“route.params.id”调用我的方法时,它表示参数未定义。当我执行 console.log(route.params.id) 时,它会在控制台中正确显示。我尝试过使用计算属性,但我遇到了同样的问题。

设置代码:

import  ref  from "vue";
import MovieApiService from "../api/MovieApiService";
import  useRoute  from "vue-router";

export default 
  setup() 
    const movie = ref([]);
    const route = useRoute();

    MovieApiService.getMovie(route.params.id).then((response) => 
      movie.value = response.data.results;
    );

    return 
      movie,
    ;
  ,
  method: ,
;

被调用的方法:

static getMovie(body: GetMovieByTmdbId) 
    return axios.get(
      `https://api.themoviedb.org/3/movie/$body.id?api_key=$apiKey`
    );
  

这是我尝试计算的属性,结果相同。

setup() 
    const route = useRoute();
    const id = computed(()=>return route.params.id)

    const movie = ref([]);

    getMovie(id).then((response) => 
      movie.value = response.data.results;
      console.log(movie.value);
    );

当我调用我的方法时,我应该如何确保这个值可用?

【问题讨论】:

【参考方案1】:

您将route.params.id 作为变量提供给getMovie(body)

然后您在您的 URL 中使用 body.id。这将等于未定义的 route.params.id.id

在您的网址中使用body,或将参数更改为id,这样更有意义。

像这样:

...
const route = useRoute();
MovieApiService.getMovie(route.params.id).then((response) => 
  movie.value = response.data.results;
);
...
const getMovie = (id) => 
  return axios.get(
    `https://api.themoviedb.org/3/movie/$id?api_key=$apiKey`
  );

【讨论】:

谢谢,解决了我的问题! :)

以上是关于为啥设置方法中的“route.params.id”不可用/未定义?的主要内容,如果未能解决你的问题,请参考以下文章

不允许通过字符串文字访问对象!当我尝试通过动态 id 访问 (route.params['id'] 路由参数时

vue-router中query和params传参(接收参数)以及$router$route的区别

vue-router

关于vue-router 中参数传递的那些坑(params,query)

Vue Router路由传参三种方法及区别

vue路由params传参