当前位置: 首页 > 知识库问答 >
问题:

使用vue-router从$root实例向子组件传递动态prop

孟成化
2023-03-14

当使用VueJS时,当使用vue-router时,如何从$root视图实例将prop传递给子组件?

$root实例:

const router = new VueRouter({
    routes: [{
        path: "/dashboard",
        component: () => import("./User/Dashboard.vue" /* webpackChunkName: "js/components/user/Dashboard" */ )
    }]
});

var app = new Vue({
    el: '#app',
    router,
    data: () => ({
        passedProp
    }), 
});

Laravel布局使用:

@section('content')
    <transition name="slide">
        <router-view></router-view>
    </transition>
@endsection

vue路由器提供的子组件:

<script>
export default {
    props: [
        'clearFormProp'
    ]
}
</script>

查看vue路由器文档,有一种通过url传递道具的方法。然而,这使得道具无状态,并且不保留反应性。它只在页面刷新时更新道具。

传递一个静态道具给我留下了同样的问题。

我怎样才能把道具传递给孩子,同时仍然保持道具的反应性?

共有2个答案

申昌勋
2023-03-14

将道具传递到

<router-view :prop1="localData"></router-view>

在目标组件中:

<template>
  <h1>
    {{ prop1 }}
  </h1>
</template>
<script>
 export default{
   props:{
     prop1: Object
   }
 }
</script>

万俟靖
2023-03-14

此解决方案使用状态模式来解决问题。

假设有一个简单的计数器应用程序,其中有一个显示当前值的文本和一个按钮,用户每次单击该按钮时,该按钮都会增加当前值。

将状态提取为常量:

const counter = {
    value: 0
}

export { counter };

然后,您可以导入子组件并直接使用Vue对其进行变异:

<template>
    <div>
        counter value from child:
        {{ counter.value }}
    </div>
    <div>
        <button type="button" @click="() => counter.value++">increment from child</button>
    </div>
</template>

<script>
import { counter }  from "/src/counter.js";

export default {
    data: () => ({ counter })
}
</script>

在根组件中,您可以执行相同的操作:

<template>
    <div>
        counter value from root:
        {{ counter.value }}
    </div>
    <div>
        <button type="button" @click="() => counter.value++">increment from root</button>
    </div>

    <ChildComponent />
</template>


<script>
import ChildComponent from './components/ChildComponent.vue'
import { counter }  from "/src/counter.js";

export default {
  name: 'App',
  data: () => ({ counter }),
  components: {
    ChildComponent
  }
}
</script>

请参阅下面的图片示例的行为:

注意:这只会起作用,因为这两个组件正在变异相同的对象并触发事件以刷新自身。如果在组件外部增加计数器值,则不会看到刷新,这可以通过vuex解决。

此外,如果这种在多个组件中控制数据的场景在您的应用程序中很常见,我也建议使用vuex

Vuex是一个用于Vue.js应用程序的状态管理模式库。它作为应用程序中所有组件的集中存储,规则确保状态只能以可预测的方式突变

 类似资料:
  • 本文向大家介绍vue子组件使用自定义事件向父组件传递数据,包括了vue子组件使用自定义事件向父组件传递数据的使用技巧和注意事项,需要的朋友参考一下 使用v-on绑定自定义事件可以让子组件向父组件传递数据,用到了this.$emit(‘自定义的事件名称',传递给父组件的数据) @increment是子组件this.$emit('increment'自定义的事件,newValue)用来告诉父组件自己干

  • 本文向大家介绍Vue父子传递实例讲解,包括了Vue父子传递实例讲解的使用技巧和注意事项,需要的朋友参考一下 实现功能: 1、子组件的input输入,改变父组件信息 2、父组件对子组件1,3进行监听与控制 3、子组件1与子组件3相互关联 父子双向通信流程: 子组件的input通过事件监听->控制子组件的data中变量/向父组件$emit子事件及变量 父组件监听到$emit事件及变量,赋予父组件的变量

  • 本文向大家介绍vue组件中使用props传递数据的实例详解,包括了vue组件中使用props传递数据的实例详解的使用技巧和注意事项,需要的朋友参考一下 在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递。父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息。看看它们是怎么工作的。  一、基本用法 组件不仅仅是要把模板的内容进行复用,更重要的是组件间要进行

  • 本文向大家介绍Vue 使用Props属性实现父子组件的动态传值详解,包括了Vue 使用Props属性实现父子组件的动态传值详解的使用技巧和注意事项,需要的朋友参考一下 如下所示: 这里需要注意的是在html中的 my-message 就是scrpit中的 myMessage。因为: HTML 特性是不区分大小写的。所以,当使用的不是字符串模板时,camelCase (驼峰式命名) 的 prop 需

  • 父组件动态传递ref给子组件应该怎么写? 父组件调用 子组件 这里我想把父组件传递的ccc动态给子组件,然后操作子组件?

  • 但是控制台显示一个错误: 未捕获的 DOMException:无法在 “History” 上执行 'pushState':无法克隆 Symbol(react.element)。 这是什么意思?对此我能做些什么?

  • 本文向大家介绍vue 子组件向父组件传值方法,包括了vue 子组件向父组件传值方法的使用技巧和注意事项,需要的朋友参考一下 子组件注册触发事件,父组件注册 触发子组件事件后的方法写在method里面 父组件这么写 子组件component-a这么写 以上这篇vue 子组件向父组件传值方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍vue 动态组件用法示例小结,包括了vue 动态组件用法示例小结的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了vue 动态组件用法。分享给大家供大家参考,具体如下: 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,我们让多个组件可以使用同一个挂载点,并动态切换。根据 v-bind:is="组件名" 中的组件名去自动匹配组件,如果匹配不到则不显示。