$ router.push

时间:2016-11-18 15:27:08

标签: vue.js url-parameters vue-resource vue-router

我用这个

this.$root.$router.push({ path: '/dashboard', params: { errors: 'error' }, query: { test: 'test' } })

在我的组件中

在发生错误时重定向到其他URL。问题是,当我想访问仪表板组件中的params字段时,它是空的。 query字段效果很好。我正试图通过this.$route.params.errors访问它。

3 个答案:

答案 0 :(得分:29)

您只能params使用named路径(我认为)。

示例:

//route (in your router file should have "name")
{ path: '/errors', name: 'EXAMPLE', component: ... }

//navigating
this.$router.push({
    name: 'EXAMPLE', 
    params: { errors: '123' }
});

现在它在this.$route.params中具有正确的值。

答案 1 :(得分:2)

如果您想要使用命名路线,您可以试试这个:

<强> ES6

this.$root.$router.push({
    path: `/dashboard/${error}`, 
    query: { test }
})

<强> ES5

this.$root.$router.push({
    path: '/dashboard/' + error, 
    query: { test: 'test' }
})

答案 2 :(得分:0)

在我的一种观点(组件)中,我遇到了类似的问题。我试图(以编程方式)从/foo/bar导航到/foo/bar/123,但是稍后在组件中无法使用route参数。我相关的导航代码如下:

methods: {
  save_obj() {
    let vm = this;
    // Make AJAX call to save vm.my_obj, and on success do:
    let v = `${vm.$route.path}/${vm.my_obj.id}`;
    console.log("Loading view at path: "+v);
    vm.$router.push({ path: v });
  },
    ...
}

它将打印预期的日志(例如,路径为/ foo / bar / 112的加载视图),但是,created()钩中的数据加载将不会接收route参数的值。我失败的created()代码如下所示:

created: function() {
      console.log("Loading object details.");
      let vm = this;
      let cid = vm.$route.params.id; // <---- This was the problem
      vm.$http.get('api/'+cid)
      .then(function (res) {
        if (res.data.status == "OK") {
          vm.my_obj = res.data.body;
        } else {
          vm.setStatusMessage(res.data.body);
        }
      })
      .catch(function (error) {
        console.log(error);
        vm.setStatusMessage("Error: "+error);
      });
}

在下面引用的the third note here中指出了解决方案:

注意:如果目的地与当前路线相同且仅 参数正在发生变化(例如,从一个配置文件转到另一个/ users / 1 -> / users / 2),则必须使用beforeRouteUpdate对更改做出反应(例如,获取用户信息)。

我必须在组件中执行以下操作:

let cid = vm.$route.params.id;中的行created()更改为let cid = vm.course.id

,然后将以下内容添加到组件中:

beforeRouteUpdate(to, from, next) {
    if (to.params.id) {
      this.my_obj.id = to.params.id;
    }
    // Some other code specific to my app
    next();
  }

我希望这可以帮助解决类似问题的人。