向 VueJS + Vue Router 中的组件发送数据

Posted

技术标签:

【中文标题】向 VueJS + Vue Router 中的组件发送数据【英文标题】:Send data to components in VueJS + Vue Router 【发布时间】:2017-05-23 11:41:35 【问题描述】:

我无法将数据从应用程序传递到组件。渲染后它只显示清晰的 html,没有来自 vue 的数据。所有作品,但没有数据((

我的 app.js 代码:

var Series = Vue.component('Series', require('./components/Series.vue'),
    props: 
        series: 
            type: Array,
            default: []
        ,
        images: 
            type: Array,
            default: []
        ,
        showPhotos: 
            type: Boolean,
            default: false
        
    
);
const Bar =  template: '<div>bar</div>' 
const Foo =  template: '<div>foo</div>' 

const routes = [
   path: '/weedings', component: Series ,
   path: '/', component: Foo ,
   path: '/family', component: Foo ,
   path: '/other', component: Foo ,
   path: '/videos', component: Bar ,
   path: '/blog', component: Bar ,
   path: '/about', component: Foo ,
   path: '/contacts', component: Bar 
]
const router = new VueRouter(
  routes // short for routes: routes
);
var app = new Vue(
    el: "#app",
    router,
    data: 
        series: [],
        currentSerie: 0,
        images: [],
        showPhotos: false
    ,
    methods: 
        fetchSeries: function()
            this.$http.get('/api/fetchSeries').then((response) => 
                this.series = response.body
            , (response) => 
                alert("fail")
            );
        ,
        fetchPhotos: function(id)
            this.showPhotos = false;
            this.$http.get('/api/fetchPhotos/'+id).then((response) => 
                this.images = response.body
                this.showPhotos = true;
                $("html, body").animate( scrollTop: 60 , "500");
            , (response) =>  
                alert("fail")
            );
        ,
        photos: function(id)
            this.fetchPhotos(id)
        
    ,
    created: function()
        this.fetchSeries()
        setTimeout(function() require('./custom'); , 1000);
    

);

当我不使用 vue-router 时,一切正常。而且我知道我可以通过这种方式将数据传递给组件:&lt;my-component :artribute="value"&gt;&lt;/my-component&gt;,但在这种情况下 IDK 如何传递数据。

【问题讨论】:

你在使用任何预处理器吗? Vue.component()中的第二个参数是什么,我从来没有见过一个签名包含三个参数的组件注册,但我可能是错的。 我使用 webpack (Laravel Elixir)。看这里来自 laravel 的默认 app.js github.com/laravel/laravel/blob/master/resources/assets/js/… 在您的链接中,Vue.component() 调用有两个正确的参数,这里您的代码有三个。 而且您不应该多次调用Vue.component 来注册同一个组件(Series 在顶部注册一次,然后在路由定义中重新注册)。 @MathewJibin,我的错,忘了编辑这个。 var Series = Vue.component('Series', require('./components/Series.vue'), props: series: type: Array, default: [] , images: type: Array, default: [] , showPhotos: type: Boolean, default: false ); const routes = [ path: '/weedings', component: Series , ] 【参考方案1】:

像这样使用函数模式:


    path: '/weedings',
    component: Series,
    props: () => (
         series: app.series, images: app.images, showPhotos: app.showPhotos 
    )

检查JSFiddle中的工作示例。

注意:您必须使用vuex 作为应用程序中所有组件的集中存储,才能实现更复杂的场景。

【讨论】:

【参考方案2】:

在你的路线声明中你应该添加道具

`const routes = [
     path: '/weedings', component: Series, props: true]` 

这里提到:Passing props to Vue.js components instantiated by Vue-router

【讨论】:

来自文档:当 props 设置为 true 时,route.params 将被设置为组件 props。

以上是关于向 VueJS + Vue Router 中的组件发送数据的主要内容,如果未能解决你的问题,请参考以下文章

vuejs2:如何将 vuex 存储传递给 vue-router 组件

在实现 Vue-Router 的 VueJS SPA 中实现嵌套的 $refs

Vuejs:我应该在 vue-router SPA 中的哪里放置一些常用的 js 工具?

Vuejs实战项目:登陆页面

VueJS:在没有集中存储(vuex 或 eventBus)的情况下直接访问子项(使用 vue-router)时访问子项中的父道具

使用“v-on:”指令向 <router-link> 组件添加事件监听器 - VueJS