Vue.js의 URL에서 쿼리 매개 변수를 얻으려면 어떻게해야합니까?


251

Vue.js에서 쿼리 매개 변수를 어떻게 가져올 수 있습니까?

http://somesite.com?test=yay.

가져올 방법을 찾을 수 없거나 순수한 JS 또는 라이브러리를 사용해야합니까?


5
왜이 투표가 내려지고 있습니까? Vue.js에 필요합니다. vue 라이브러리 또는 내장 라이브러리가 있으면 원시 js보다 선호됩니다.
Rob

Vue Router에는 아마도 그것을 사용하고있는 무언가가있을 것입니다.
Joe Clay

54
복제본에 가깝지 않습니다. vue.js 는 바닐라 자바 ​​스크립트와 다른 특정 논리를 가진 프레임 워크입니다
Yerko Palma

13
vue-router없이 어떻게이 작업을 수행 할 수 있습니까?
코너 거머리

답변:


345

route object 의 문서에 따르면 $route구성 요소에서 객체에 액세스하여 필요한 것을 노출시킵니다. 이 경우

//from your component
console.log(this.$route.query.test) // outputs 'yay'

8
예! 그가 vue-router이보다 더 많이 사용하지 않는다면 , 표준 JS 메소드를 사용해야하기 때문에 실제로 복제본이 될 것입니다.
Jeff

1
난 그냥 같은 사용자가 단지 VUE 라우터에 대한 질문 전에 게시 때문에 내가 그것과 명성이 있다면, 나는 VUE 라우터 태그를 만들 것이라고 가정
Yerko 팔마

2
좋은 지적! 계속해서 vue-router태그를 만들어 추가했습니다.
Jeff

문제는 vue 문서가 구성 요소를 라우터에 연결하는 것이 바람직하지 않다고 간주한다는 것입니다. 소품 전달을 권장하지만 쿼리 매개 변수를 소품으로 동적으로 전달하는 것은 불가능합니다. 예를 들어 beforeEach 경비원과 같은 return next({ name: 'login', query:{param1: "foo" }, });일이 작동하지 않습니다. 로그인 구성 요소 내에서 소품 param1이 정의되지 않았습니다.
hraynaud

45

vue-route없이 URL을 분할하십시오

var vm = new Vue({
  ....
  created()
  {
    let uri = window.location.href.split('?');
    if (uri.length == 2)
    {
      let vars = uri[1].split('&');
      let getVars = {};
      let tmp = '';
      vars.forEach(function(v){
        tmp = v.split('=');
        if(tmp.length == 2)
        getVars[tmp[0]] = tmp[1];
      });
      console.log(getVars);
      // do 
    }
  },
  updated(){
  },

다른 솔루션 https://developer.mozilla.org/en-US/docs/Web/API/HTMLHyperlinkElementUtils/search :

var vm = new Vue({
  ....
  created()
  {
    let uri = window.location.search.substring(1); 
    let params = new URLSearchParams(uri);
    console.log(params.get("var_name"));
  },
  updated(){
  },

2
왜 분리 것이 location.href있을 때 자신을 location.search쉽게 사용할 수? developer.mozilla.org/en-US/docs/Web/API/… 예. var querypairs = window.location.search.substr(1).split('&');또한 질의 이름-값 쌍을 '='로 나누면 값없이 명명 된 질의 매개 변수를 전달할 수 있기 때문에 항상 작동하지는 않습니다. 예를 들어 ?par1=15&par2, '='로 나누면 1 개의 요소 만있는 tmp가 생성되므로 코드에서 par2에 예외가 발생합니다.
Arthur

1
죄송하지만 예외는 발생하지 않지만 par2도 잡을 수 없습니다. 기본적으로에 할당 undefined합니다 getVars['par2'].
Arthur

GET 메소드는 URL에있는 문자열 (이름 / 값 쌍)입니다.
erajuan

@Arthur 맞아, 나는 유효성 검사를 추가하고 다른 솔루션을 추가했습니다. 감사합니다
erajuan

37

VueJS의 초보자를 돕는 자세한 답변 :

  • 먼저 라우터 개체를 정의하고 원하는 모드를 선택하십시오. 경로 목록 내에서 경로를 선언 할 수 있습니다.
  • 다음으로 메인 앱이 라우터가 있음을 알기를 원하므로 메인 앱 선언 안에 선언하십시오.
  • 마지막으로 $ route 인스턴스는 현재 경로에 대한 모든 정보를 보유합니다. 코드는 URL에 전달 된 매개 변수 만 콘솔 로그합니다. (* 마운트는 document.ready와 유사합니다. 즉, 앱이 준비되는 즉시 호출됩니다)

그리고 코드 자체 :

<script src="https://unpkg.com/vue-router"></script>
var router = new VueRouter({
    mode: 'history',
    routes: []
});
var vm =  new Vue({
    router,
    el: '#app',
    mounted: function() {
        q = this.$route.query.q
        console.log(q)
    },
});

7
그것을 설명하십시오
무하마드 Muazzam에게

먼저 라우터 개체를 정의하고 원하는 모드를 선택하십시오. 경로 목록에서 경로를 선언 할 수 있습니다. 다음으로 메인 앱이 라우터가 있음을 알기를 원하므로 메인 앱 선언 안에 선언하십시오. 마지막으로 $ route 인스턴스는 현재 경로에 대한 모든 정보를 보유합니다. 내 코드는 URL에 전달 된 매개 변수 만 콘솔 로그합니다. (* 마운트는 document.ready와 유사합니다. 즉, 앱이 준비되는 즉시 호출됩니다)
Sabyasachi

3
더 단서가없는 초보자 : VueRouter는 VueJS 코어에 포함되어 있지 않으므로 VueRouter를 별도로 포함 할 수 있습니다.<script src="https://unpkg.com/vue-router"></script>
rustyx

2
@Sabyasachi 답변을 편집하고 게시물 자체에 해당 정보를 추가하십시오.
Simon Forsberg

1
new Vue({ router, ... })유효한 구문이 아닙니다.
Crescent Fresh

17

을 사용하는 다른 방법 vue-router은 쿼리 매개 변수를 라우터의 소품에 매핑하는 것입니다. 그런 다음 컴포넌트 코드의 다른 소품처럼 취급 할 수 있습니다. 예를 들어이 경로를 추가하십시오.

{ 
    path: '/mypage', 
    name: 'mypage', 
    component: MyPage, 
    props: (route) => ({ foo: route.query.foo })  
}

그런 다음 컴포넌트에서 소품을 정상적으로 추가 할 수 있습니다.

props: {
    foo: {
        type: String,
        default: null
    }
},

그런 다음 사용할 수 있으며 this.foo원하는대로 할 수 있습니다 (예 : 감시자 설정 등).


대단하다. 퍼즐에 빠진 조각은 시작입니다. `this. $ router.push ({name : 'mypage', query : {foo : 'bar'})`
slf

7

이 날짜 부터 동적 라우팅 문서에 따라 올바른 방법 은 다음과 같습니다.

this.$route.params.yourProperty

대신에

this.$route.query.yourProperty

3
그들은 같은 것이 아닙니다! queryURL에서 쿼리를 가져 오는 데 사용해야 합니다. 문서에서 : $ route.params 외에도 $ route 객체는 $ route.query (URL에 쿼리가있는 경우)와 같은 다른 유용한 정보도 노출합니다.
hatef

설명을 주셔서 감사합니다 :)
Marco

2

vue-router를 사용할 수 있습니다. 아래 예가 있습니다.

URL : www.example.com?name=john&lastName=doe

new Vue({
  el: "#app",
  data: {
    name: '',
    lastName: ''
  },
  beforeRouteEnter(to, from, next) {
      if(Object.keys(to.query).length !== 0) { //if the url has query (?query)
        next(vm => {
         vm.name = to.query.name
         vm.lastName = to.query.lastName
       })
    }
    next()
  }
})

참고 : 에서 beforeRouteEnter우리는 같은 구성 요소의 속성에 액세스 할 수없는 기능 : this.propertyName내가 통과 왜 거긴 vmnextfunction.It는 VUE는 instance.Actually 액세스에 recommented 방법 vm은 VUE 예를 들어 서


2

URL이 다음과 같은 경우 :

somesite.com/something/123

'123'은 'id'(/ something / : id와 같은 URL)라는 매개 변수 인 경우 다음을 시도해보십시오.

this.$route.params.id


-6

서버가 PHP를 사용하는 경우 다음을 수행 할 수 있습니다.

const from = '<?php echo $_GET["from"];?>';

그냥 작동합니다.


2
문제는 PHP가 아닌 Vue로 무언가를하는 방법이었습니다.
robertmain
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.