You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:23:17