我們常常發現,靜態頁面的插件效果還好好的,但在使用vue進行數據交互時,插件功能卻失效了。
問題分析:
這根vue的生命周期有關,vue生命周期分為以下幾個周期。
- beforeCreate
- created
- beforeMount
- mounted
- beforeUpdate
- updated
- beforeDestroy
- destroyed
當mounted時,才完成掛載,在此之后的各種插件程序運行時,才有效果。
所以,插件程序與vue程序並行,vue實例還未創建,所以插件無法獲取dom元素,插件功能也就失效了。
解決辦法:
情況1:如果使用插件的dom元素,不是ajax異步請求來的(寫死在HTML中)。
解決方式:把“插件程序”,放在mounted中。
1、封裝插件程序:
function init() { //你的插件程序,該代碼可以放在其他js文件上
}
2、“插件程序”,放在vue程序的mounted(){}
mounted(){ init(); //插件程序,放在mounted中
},
情況2:如果使用插件的dom元素,是ajax異步請求來的。
解決方式:把“插件程序”,放在ajax請求成功后的success中,並用 this.$nextTick。
1、封裝插件程序:
function init() {
//你的插件程序,該代碼可以放在其他js文件上
}
2、“插件程序”,放在ajax的success中
success: function (data) {
_this.$nextTick(()=>{
init();
});
},
