laravel - 如何确保Vuejs中挂载不同父组件时子组件不总是重新加载

标签 laravel vue.js

enter image description here

正如所提供的图像中一样,有一个子组件被导入到每个父组件(Pdetails、Education、Dependents...等)中。我面临的一个主要挑战是,每当我路由到这些组件中的任何一个时,axios 都会发送一个 get 请求,该请求将相同的内容加载到子组件中,我相信这对性能不利。有没有办法只做一次?

其次,如何与父组件共享子组件中API返回的数据。

这是子组件

<template>
    <div class="col-lg-3 col-xl-3">
       <div class="card-box text-center">
           <img src="/assets/images/users/user-1.jpg" class="rounded-circle avatar-lg img-thumbnail" alt="profile-image">
           <h4 class="mb-0"> {{  employee.surname }} {{  employee.first_name }} </h4>
           <p class=" mb-2 font-13"><strong><i class="fe-mail text-info"></i> :</strong> <span class="ml-2 ">{{employee.email}}</span></p>
          <p class=" mb-1 font-13"><strong><i class="fe-layers text-danger"></i> :</strong><span class="ml-2">{{employee.age}}</span></p>
        </div>
      </div> <!-- end col-->

</template>

<script>
export default {
    name: 'EmployeeCard',
    data(){
        return{
            employee: {
                job: '', 
                state:'',
                company: ''
            },

        }
    },
    methods:{
        getUser(){
            axios.get('/api/users/'+ this.$route.params.id)
                .then ( response => {
                    this.employee = response.data.data[0].data; 
                })
        }
    },

    mounted(){

        this.getUser();
    }

}
</script>

下面是个人详细信息组件

<template>
    <div>
        <div class="row">
            <EmployeeCard /> <!-- Can I get data from this child component to this component? -->
            <div class="col-lg-9 col-xl-9">
                    <div class="card text-center">
                        <ProfileNav />                    
                        <div class="card-body">

                        </div>
                    </div> <!-- end card-box-->
                </div>
        </div>       
    </div>
</template>

<style scoped>

</style>
<script>
import ProfileNav from "../nav/ProfileNav";
import EmployeeCard from "./EmployeeCard";
export default {
    name: 'PDetails',

    components:{
        ProfileNav, EmployeeCard
    },


    //every component must return something
    data(){
        return {

        }
    },



}
</script>

我想将 EmployeeCard 中的 employee.first_name 等数据共享到此 EmployeeShow

最佳答案

您可以通过从子级向父级发出 en 事件来实现。

在子组件中:

        getUser(){
            axios.get('/api/users/'+ this.$route.params.id)
                .then ( response => {
                    this.employee = response.data.data[0].data; 
                    this.$emit('setEmployee', this.employee);
                }) 
        }

在个人详细信息组件中:

<template>
    <div>
        <div class="row">
            <EmployeeCard @setEmployee="setEmployee"/> <!-- Can I get data from this child component to this component? -->
            <div class="col-lg-9 col-xl-9">
                    <div class="card text-center">
                        <ProfileNav />                    
                        <div class="card-body">

                        </div>
                    </div> <!-- end card-box-->
                </div>
        </div>       
    </div>
</template>

<style scoped>

</style>
<script>
import ProfileNav from "../nav/ProfileNav";
import EmployeeCard from "./EmployeeCard";
export default {
    name: 'PDetails',

    components:{
        ProfileNav, EmployeeCard
    },
    methods: {
      setEmployee(event) {
        this.employee = event;
      }
    }

    //every component must return something
    data(){
        return {
            employee: null
        }
    },



}
</script>

我认为Vuex解决两次加载相同数据的问题。

使用 vuex,您可以创建一个商店,在其中保存您想要在应用程序中其他任何地方使用的信息。

关于laravel - 如何确保Vuejs中挂载不同父组件时子组件不总是重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58651783/

相关文章:

php - 多个路由文件而不是 laravel 5 中的一个主路由文件

即使使用 Web 中间件,Laravel 5.2 session 值也不会持久

javascript - 从 php/laravel 循环遍历集合,并将每次迭代中的一个项目添加到 jsPDF 捆绑文档

javascript - 对象值在 vue.js 的数组中返回 'Undefined'

php - 发布http ://localhost:8000/index/bots 500 (Internal Server Error)

php - 如何为团队设置自定义顺序

vue.js - Nuxt.js 存储,将操作发送到其他存储

laravel - Nginx 上历史模式的 Vue 路由器服务器配置不起作用

javascript - obj 有时未定义,有时工作正常

javascript - 将内联样式不透明度值与观察者属性绑定(bind)