📕 Language/Vue

[vuejs] route를 통해 받은 중첩된 객체 param값, [Object object] 뜨는 문제 해결

a n u e 2023. 3. 31. 13:28

 

Router를 이용하여 화면 전환을 하면서 데이터를 보내주는 경우

보통 아래와 같은 방식을 사용한다.

const pageNm = 'FileName';
const param = {};

const router = useRouter()
router.push({ name: pageNm, params: param });
})

 

그리고 받아오는 쪽은 route를 이용하여 전달받은 데이터를 꺼내 사용할 수 있다.

 

그런데, param에서 중첩된 객체를 보내니 받는 쪽에서 제대로 꺼내오지 못하는 문제가 발생했다.

예를 들어 아래와 같은 형식의 데이터를 보내면

 

  • 데이터 송신 부분
const fileName = 'Page';
const param = {
        a : 'A',
        b : 'B',
        bundleData: {
          c : 'C',
          d : 'D',
        },
      };
      router.push({ name: fileName, params: param });

 

  • 데이터 수신 부분
console.log(route.params.bundleData); //[Object object]

받아오는 쪽에서 해당 데이터를 꺼낼 때, [Object object] 라는 타입만을 명시해줄 뿐, 실제 데이터를 받아오진 못했다.

 


 

이를 해결하려면

보낼 때 각 Object에 JSON.Stringify로 한번 묶어서 보낸 후,

받을 때 각 Object에 JSON.parse 처리를 하면 된다.

 

중요한 것은 저 route.param 전체에 대한 JSON.parse 처리가 아닌, 개별 Object에 대한 처리이다.

 


변경 후 소스

  • 데이터 송신 부분
const fileName = 'Page';
const param = {
        a : 'A',
        b : 'B',
        bundleData: JSON.stringify({
          c : 'C',
          d : 'D',
        }),
      };
      router.push({ name: fileName, params: param });

 

  •  데이터 수신 부분
 route.params.bundleData = JSON.parse(route.params.bundleData);