Vue路由器。绑定数据

时间:2017-12-06 16:54:10

标签: javascript vue.js bind vue-router

我正在开发vue应用程序,现在我正在使用vue路由器。 但是我将数据绑定到路由器模板时遇到了一些问题。

请帮帮我。

HTML:          

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <router-view></router-view>
</div>

脚本:

const Foo = { template: '<div>{{foo}}</div>' }
const Bar = { template: '<div>bar</div>' }


const routes = [
  { path: '/foo', component: Foo },
  { path: '/bar', component: Bar }
]

const router = new VueRouter({
  routes
})


const app = new Vue({
el: '#app',
  router,
  data: function(){
    return {foo: "asdasdas"}
  }
})

{{foo}}绑定无法正常工作。

实例: https://jsfiddle.net/xgrjzsup/4430/

3 个答案:

答案 0 :(得分:2)

来自guide on components

  

每个组件实例都有自己独立的范围。这意味着你   不能(也不应该)直接引用孩子的父数据   组件的模板。数据可以传递给子组件   使用道具。

Foo是您通过路由器设置的应用程序的子组件。

将数据从父级传递给子级的一种方法是使用道具。

修改您的Foo定义以接受foo属性:

const Foo = { 
    props: ['foo'],
    template: '<div>{{foo}}</div>' 
}

并绑定模板中的父属性

<router-view :foo="foo"></router-view>

更新的小提琴:https://jsfiddle.net/xgrjzsup/4431/

答案 1 :(得分:0)

Ofc它不起作用。你必须在你使用的模板上设置数据。

在你的情况下:

const Foo = {
  template: '<div>{{foo}}</div>',
  data () {
    return {
      foo: 'magic'
    }
  }
}

欢呼和快乐的编码。

答案 2 :(得分:-1)

在您的情况下,有两种方法可以访问“foo”var。

{{$parent.foo}}
{{$root.foo}}

但请考虑使用Vuex在您的应用中共享数据 - https://github.com/vuejs/vuex 或者将foo作为参数传递给路线 - https://router.vuejs.org/en/essentials/passing-props.html