Vue.js mounted钩子函数失效求助:页面加载无法自动获取产品列表
问题:Vue mounted钩子失效,页面加载时未自动调用getProducts获取产品列表
我希望在加载'/Admin/ProductsAdmin'页面时自动调用getProducts获取所有产品列表,但mounted钩子函数失效,页面刷新或加载时无任何响应。以下是我的main.js代码:
var app = new Vue({ el: "#app", data: { loading: false, objectIndex: 0, productModel: { id: 0, name: "Product Name", description: "Product Description", value: 1.99 }, products: [] }, mounted() { this.getProducts(); console.log("mounted"); }, methods: { getProduct(id) { this.loading = true; axios.get('/Admin/ProductsAdmin' + id) .then(res => { console.log(res); this.products = res.data; }) .catch(err => { console.log(err); }) .then(() => { this.loading = false; }); }, getProducts() { this.loading = true; axios.get('/Admin/ProductsAdmin') .then(res => { console.log(res); this.products = res.data; }) .catch(err => { console.log(err); }) .then(() => { this.loading = false; }); }, createProduct() { this.loading = true; axios.post('/Admin/products', this.productModel) .then(res => { console.log(res.data); this.products.push(res.data); }) .catch(err => { console.log(err); }) .then(() => { this.loading = false; }); }, updateProduct() { this.loading = true; axios.put('/Admin/products', this.productModel, { headers: { 'Content-Type': 'application/json' } }) .catch(err => { console.log(err); }) .then(() => { this.loading = false; }); }, deleteProduct(id,index) { this.loading = true; axios.delete('/Admin/products/' + id) .then(res => { console.log(res); this.products.splice(index, 1); }) .catch(err => { console.log(err); }) .then(() => { this.loading = false; }); }, editProduct(product, index) { this.objectIndex = index; this.productModel = { id: product.id, name: product.name, description: product.description, value: product.value, }; } }, computed: { } });
排查步骤
- 检查挂载目标DOM:确认页面中存在
id="app"的元素,且Vue代码在该元素渲染完成后执行(比如将script标签放在</body>前,或者用DOMContentLoaded事件包裹Vue初始化代码)。如果目标元素不存在,Vue实例无法挂载,mounted钩子不会触发。 - 查看控制台错误:打开浏览器开发者工具的Console面板,检查是否有Vue初始化失败、axios未加载等报错。这类错误会中断代码执行,导致
mounted无法运行。 - 验证路由逻辑:如果是Vue Router单页应用,确认'/Admin/ProductsAdmin'路由对应的组件是否是当前Vue实例所在的组件。根实例的
mounted仅在页面首次加载时执行一次,路由切换不会触发;若该页面是路由组件,需将mounted钩子写在对应路由组件内部。 - 确认
mounted是否触发:先看控制台是否输出"mounted"。如果没有输出,说明mounted未触发,问题在实例挂载环节;如果有输出,说明mounted已执行,问题出在getProducts方法内部(比如请求URL错误、axios请求失败)。 - 检查Vue版本:确保Vue版本与初始化代码匹配。Vue 3使用
createApp({...}).mount('#app'),而Vue 2才是new Vue({el: '#app'}),版本混用会导致实例初始化异常。
内容的提问来源于stack exchange,提问作者prajwal lama
相关产品推荐
相关产品推荐

