Vue路由器更改页面时如何加载Jquery插件/脚本?

Cha*_*lie 5 jquery vue.js vue-router vuejs2

我在这里四处寻找答案,但已经没有提供的答案适合我。

这是一个有效的演示代码pen.io/figaro/pen/mBvWJa

我的项目很简单,一个带有Vue的单页程序来处理页面路由。我在每个不同的页面上都有一些基于jQuery的内容。当我第一次加载页面时,jQuery插件显示正常。但是当我导航到其他页面时,不会重新加载jQuery插件。自从我想到的钩子之后,我就尝试了所有...钩子,beforeRouteEnter,beforeRouteLeave,更新等,但它们都不起作用。我试过使用this。$ nextTick(function(){},但也不起作用。

jQuery插件是光滑的轮播。是的,我知道有一个官方的vue slick包装器,但是我没有使用CLI。...我的项目只是通过CDN连接了vue和vue路由器,我不知道如何在我的项目中使用它设置(它们的示例适用于单个文件组件)。我不在乎解决方案是hacky还是不是最佳实践,我只需要让Vue在每个页面上加载漂亮的初始化脚本即可。我看到了制作指令或组件的示例,但它们对我来说没有意义,因为它们假设您使用的不是我的单个文件组件。有什么办法吗?

main.js 

  const NotFoundPage = {
  name: "NotFoundPage",
  template: "#404-template"
};

const routes = [
  { path: "/", component: Industry },
  { path: "/about", component: My Page },
  { path: "/contact", component: About},
  { path: "*", component: NotFoundPage }
];

const router = new VueRouter({
  routes
});

new Vue({
  router,
  template: "#root-template",
  mounted: function() {
    this.$nextTick(function () {
    })
  },
  beforeRouteUpdate ( to, from , next ) {
    this.$nextTick(function () {
    })
  },
  ready: function() {
    this.$nextTick(function () {
    })
  },
  updated () {
  }
}).$mount("#app");
Run Code Online (Sandbox Code Playgroud)

html

<div id="app"></div>

 <template id="root-template">
 ...stuff

<view-router></view-router>

</template>

 <template id="industry"></template> etc
Run Code Online (Sandbox Code Playgroud)

jQuery脚本

$('.gallery-responsive').slick({
  infinite: true,
  speed: 300,
  slidesToShow: 3,
  draggable: true,
  edgeFriction: 0.30,
  slidesToScroll: 1,
  responsive: [{
    breakpoint: 1100,
    settings: {
          slidesToShow: 2,
          slidesToScroll: 1
    }
}, {
    breakpoint: 900,
    settings: {
          slidesToShow: 2,
          slidesToScroll: 1
    }
}, {
    breakpoint: 800,
    settings: {
      slidesToShow: 1,
      slidesToScroll: 1,
      dots: false,
      arrows: false,
    }
}
]

});
Run Code Online (Sandbox Code Playgroud)

这是一个有效的演示代码pen.io/figaro/pen/mBvWJa

cho*_*sia 5

我尝试了你的演示并通过使用修复了它(在此处检查更新的笔next) 。

beforeRouteEnter(to, from, next) {
  next(vm => {
    $(".single-item").slick({
      dots: true
    });
  })
}
Run Code Online (Sandbox Code Playgroud)

问题是您在组件中的 html 元素完全建立之前尝试使用 slick 。相反,在导航解析流程结束时next调用。