欢迎大家来到IT世界,在知识的湖畔探索吧!
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/febf3b81a9454fcf9930e1f42bf55a51.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=R%2Fx9bsDGzkzY3TpJIQdvAPzFm8s%3D)
在同一个UI中使用jQuery和Vue.js不是一个好的选择。如果你可以避免它,请尽量避免。你为了折腾自己,请把我上一句忽略。
你可能读到这篇文章不是因为你想要用jQuery和Vue,而是你必须这么做。也许客户坚持使用一个特定的jQuery插件,那么你将没有时间为Vue重写。
在本文中,我将演示如何将jQuery UI Datepicker插件添加到Vue项目。
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图1 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/f6a36fa137664803b512db0a7383fd4c.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=l3LrsbWrMD7pAVqFFVEiKQd%2F%2BBU%3D)

与jQuery和Vue一起使用的问题
jQuery和Vue一起使用有哪些潜在的危险?
Vue是一个嫉妒的库,你必须让它完全拥有你给它的DOM补丁(由你传递给el的定义)。如果jQuery对Vue正在管理的元素进行更改,比如添加一个类到某个类中,Vue将不会意识到这个变化,并且会在下一个更新周期中覆盖它。
解决方案:使用一个组件作为包装
知道Vue和jQuery永远不会共享DOM的一部分,我们必须告诉Vue封锁一个区域并将其交给jQuery。
使用一个组件来包装一个jQuery插件似乎是要走的路,因为:
-
我们可以利用生命周期钩子来设置和拆卸jQuery代码
-
我们可以使用组件接口通过道具和事件与Vue应用程序的其余部分进行通信
-
组件可以选择退出v-once更新
设置jQuery UI Datepicker
显然你需要在你的项目中首先包含jQuery和jQuery UI库。一旦你有了这些,datepicker只需要一个输入元素自己附加到:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图2 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/639ba577637044d88d5151aae5c2a4ac.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=Jl%2FTBnk%2FDl9YFd3nS%2FqSNUgUnBU%3D)
然后可以通过选择它并调用方法来实例化它:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图3 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/2be66b31af5b43f598a9dcae95978442.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=T0RtOKhO5upJClML3NYbiyhuS5Q%3D)
Datepicker组件
为了使我们的datepicker组件,模板将是这个输入元素:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图4 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/ad24c6a3277d492ea8a66f9e47306679.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=cQp9RDKsFZfzneQaYW79gkhQqtk%3D)
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图5 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/dfbc4a0b01a64050a3133f0867934973.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=HqPKXSqixxDKPUu96WHuJOyCg%2BU%3D)
注意:这个组件应该只是插件的一个包装。不要把你的运气,给它的任何数据属性或使用指令或slots。
实例化小部件
而不是给我们的输入一个ID并选择它,我们可以使用这个(this.el在组件被挂载之前是未定义的。
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图6 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/c69b09e462d443188093e7321bc38a33.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=DpQii%2F7PgjqrgkQck%2FVkLKAORGw%3D)
拆除
要拆除日期选择器,我们可以按照类似的方法并使用生命周期钩子。请注意,我们必须使用beforeDestroy来确保我们的输入仍然在DOM中,因此可以被选中(它在destroy钩子中是未定义的)。
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图7 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/22a5bf5a19a84d339cd46e4cacbb9ac1.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=aweQyLXFACsqnGfeog74PBXV7P8%3D)
通过props配置
为了使我们的组件可重用,最好允许自定义配置,比如用配置属性dateFormat指定日期格式。我们可以用props做到这一点:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图8 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/363db5551a2f42c081a9dfc50b8d671e.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=cuuOpW7cR4N6SGXcpOy2T0WpiRQ%3D)
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图9 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/d7daba365e0647a2b0babcd157f73558.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=g%2FuL8o407SURJ1ZlbvqHQb401rY%3D)
让jQuery处理更新
让我们说,而不是作为一个字符串传递你的dateFormat的props中,你把它作为你的根实例的数据属性,即:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图10 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/00da74e475b54ef78f9e9cabb7023fa3.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=oJVYvdSprUtMqFZfD80G0%2BQhTG4%3D)
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图11 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/bd7627a9370245c2ac4b220dad3de89a.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=ksOOs%2FAzLwnik%2FUHFbzO4R4gul4%3D)
这将意味着dateFormat将是一个被动数据属性。您可以在应用程序生命周期的某个时刻更新其值:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图12 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/1e20d9cf4ec24e8a8ae17de045eaad7f.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=U7j1ce%2FSfxJg50oqqPQzL2AKiy0%3D)
由于dateFormat prop是datepicker组件挂载挂钩的依赖关系,因此更新它将触发组件重新呈现。这不会很酷。 jQuery已经在输入上设置了你的datepicker,现在正在用它自己的自定义类和事件监听器来管理它。组件的更新将导致输入被替换,因此jQuery的设置将被立即重置。
我们需要这样做,以便反应数据不能触发此组件中的更新…
v-once
v-once指令用于在组件有很多静态内容的情况下缓存组件。这实际上使组件选择退出更新。
这实际上是完美的使用我们的插件组件,因为它将有效地使Vue忽略它。这给了我们一些信心,jQuery将在应用程序的生命周期中对这个元素进行无阻的控制。
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图13 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/a95e717b705b43e28fcd39dbe1c01c16.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=9vq86MNQQfHJ2vfarF0NGKtyIwY%3D)
将数据从jQuery传递给Vue
如果我们无法检索选择的日期并在应用程序的其他地方使用它,那么使用日期选择器是没有用的。让我们这样做,在一个值被选中后,它被打印到页面。
我们将首先给我们的根实例一个日期属性:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图14 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/9b1a12c9e00e40e6828da3d9ea34a36d.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=U4pt%2FMNtW7XR5lgCEHyFfiFJX5o%3D)
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图15 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/87bf17139ed84f8ba3baef24c4ee4e1c.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=B4lv8LZU%2FHaxkOzgkDvr9Ji2uOY%3D)
日期选择器窗口小部件有一个onSelect回调,当选择一个日期时被调用。然后,我们可以使用我们的组件通过自定义事件发出这个日期:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图16 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/6f6eba7ea15040aaa774ae3b0e54b9ad.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=hQtXPJ9jMRmDdQCnuIKxLVnDKdA%3D)
我们的根实例可以侦听自定义事件并接收新的日期:
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图17 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/c7570e12cc48498395c4fdff2c3b9156.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=WNvh2BylL3TtxT2925PgxkUdC%2BY%3D)
![如何(安全地)使用Vue.js的jQuery插件[亲测有效]插图18 如何(安全地)使用Vue.js的jQuery插件[亲测有效]](https://img.mushiming.top/app/itzsg_com/54fdf1145f8143eb9ab99b0c7fa13830.jpg?_iz=58558&from=article.pc_detail&x-expires=1691869891&x-signature=LqnZZb%2BW5myYi3BZ9tR2TFS2JZU%3D)
最好要感谢一下Stack Overflow的社区。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22885.html