我正在定义一个single file component

我想在那个组件上使用props选项.

但是我在哪里可以添加代码呢?

<template>
  <div class="hello">
    <h1>{{ msg }}</h1>
  </div>
</template>

<script>
export default {
  data () {
    return {
      // note: changing this line won't causes changes
      // with hot-reload because the reloaded component
      // preserves its current state and we are modifying
      // its initial state.
      msg: 'Hello World!'
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h1 {
  color: #42b983;
}
</style>

推荐答案

经过长时间的实验,我找到了一个切实可行的解决方案:

The project file structure:

src/
  assets/
  components/
    Home.vue
  App.vue
  main.js
package.json
config.js
index.html

现在,我们想访问根组件——子组件Home.vueApp的vm字段,打开vue-route.

main.js:

import Vue from 'vue'
import VueRouter from 'vue-router'
import App from './App'

Vue.use(VueRouter);

let router = new VueRouter();

router.map({
    '/': {
        name: 'home',
        component: require('./components/Home')
    }
});

router.start(App, 'body');

App.vue:

<template>

    <p>The current path: {{ $route.path }}.</p>
    <p>Outer-Value: {{ outer_var }}</p>
    <hr/>

    <!-- The below line is very very important -->
    <router-view :outer_var.sync="outer_var"></router-view>

</template>

<script>
    import Home from './compnents/Home.vue'

    export default {
        replace: false,
        components: { Home },
        data: function() {
            return {
                outer_var: 'Outer Var Init Value.'
            }
        }
    }
</script>

Home.vue

<template>
    <div>
        <p><input v-model="outer_var" /></p>
        <p>Inner-Value: {{ outer_var }}</p>
    </div>
</template>

<script>
    export default {
        // relating to the attribute define in outer <router-view> tag.
        props: ['outer_var'],
        data: function () {
            return {
            };
        }
    }
</script>

Conclusion

请注意,内部属性将属性绑定到组件标记的属性上(本例中为<router-view>标记),NOT直接在父组件上.

因此,我们手动将passing props字段绑定为组件标记上的一个属性.见:http://vuejs.org/guide/components.html#Passing-Data-with-Props

另外,请注意,我在该属性上使用了.sync,因为绑定默认为one-way-down:http://vuejs.org/guide/components.html#Prop-Binding-Types

您可以看到,通过嵌套组件共享状态有点混乱.为了更好地练习,我们可以使用Vuex.

Vue.js相关问答推荐

保持页面重新加载之间的状态

将 Vue 应用程序挂载到主 Vue 应用程序的容器中

Vuex:如何等待动作完成?

为什么当我 Select 第二个输入框时音译transliteration不起作用?

自定义props类型

更新 v-for 中使用的数组内的对象时,Vue js react性问题

Vue test-utils 如何测试 router.push()

vue-router的router-link实际刷新?

如何告诉 Vue 应用使用 Firebase 模拟器?

Vuejs模板继承

如何更改 Vuetify 日历日期格式

样式化 Vue 插槽

模块构建失败:错误:没有给出解析器和文件路径,无法在 nuxtjs 中推断出解析器

Vue - 如何在 v-if 或组件中使用窗口对象

在 Vue JS 组件中使用 Laravel 路由的最佳方法是什么

依赖关系甚至在 package.json 和 node_modules 中都没有定义

VueJS 路由 - 使用子路由和 Vuetify 时如何停止多个活动路由(active routes)?

Vuetify RTL 风格

如何在我的 vue js 中实现无限滚动

超过最大调用堆栈大小 Vuetify