如何将vue-router链接添加为ag-grid-vue列?

时间:2018-08-31 19:33:33

标签: vue-router ag-grid

ag-grid-vue documentation from ag-grid website清楚地说:

  

您可以在Grid中提供Vue路由器链接,但是您需要   确保为创建的网格组件提供一个路由器。

带有示例代码:

// create a new VueRouter, or make the "root" Router available
import VueRouter from "vue-router";
const router = new VueRouter();

// pass a valid Router object to the Vue grid components to be used within the grid
components: {
    'ag-grid-vue': AgGridVue,
    'link-component': {
        router,
        template: '<router-link to="/master-detail">Jump to Master/Detail</router-link>'
    }
},

// You can now use Vue Router links within you Vue Components within the Grid
{
    headerName: "Link Example",
    cellRendererFramework: 'link-component',
    width: 200
}

这里缺少的是如何使“根”路由器可用。我一直在研究各种资源,看到很多人有同样的问题,但是没有一个明确的答案。

https://github.com/ag-grid/ag-grid-vue/issues/1

https://github.com/ag-grid/ag-grid-vue/issues/23

https://github.com/ag-grid/ag-grid-vue-example/issues/3

https://forum.vuejs.org/t/vue-cant-find-a-simple-inline-component-in-ag-grid-vue/21788/10

ag-grid-vue是否仍可与vue-router一起使用,那又如何,或者这只是过时的文档?有人声称它对他们有用,所以我认为它在某一时刻起作用。

我现在不在寻找很酷的答案。我只想知道是否有可能。我尝试使用window或created()传递路由器,但到目前为止都无法正常工作。

谢谢!

1 个答案:

答案 0 :(得分:3)

@thirtydot建议的方法效果很好。唯一的缺点是用户无法右键单击,但是我发现您只能定义href链接。因此,当您单击鼠标左键时,事件侦听器将使用路由器。右键单击并在新选项卡中打开时,浏览器将使用href链接。

您仍然需要使根路由器可用。下面的代码示例假定您具有在vue-router-aware的Vue组件内使用了ag-grid的代码,因此,此。$ router指向根路由器。

{
    headerName: 'ID',
    field: 'id',
    cellRenderer: (params) => {
        const route = {
          name: "route-name",
          params: { id: params.value }
        };

        const link = document.createElement("a");
        link.href = this.$router.resolve(route).href;
        link.innerText = params.value;
        link.addEventListener("click", e => {
          e.preventDefault();
          this.$router.push(route);
        });
        return link;
    }
}