javascript - Vue.js:如何在单个文件组件中指定 Prop ?

标签 javascript mvvm ecmascript-6 vue.js vue-component

我正在定义一个 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>

最佳答案

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

项目文件结构:

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

现在,我们要访问根组件 -- App子组件内的 vm 字段 Home.vue , 与 vue-route上。

ma​​in.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>

结论

请注意,内部 prop 将属性绑定(bind)到组件标签的属性上(在本例中为 <router-view> 标签。),不是直接在父组件上。

因此,我们必须手动将传递的 props 字段绑定(bind)为组件标签上的属性。请参阅:http://vuejs.org/guide/components.html#Passing-Data-with-Props

另外,请注意我使用了 .sync在该属性上,因为默认情况下绑定(bind)是单向向下:http://vuejs.org/guide/components.html#Prop-Binding-Types

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

关于javascript - Vue.js:如何在单个文件组件中指定 Prop ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36674891/

相关文章:

javascript - 将选择值更改为动态添加选项会导致值 = ""

javascript - 如何在 ExtJs 中添加复制到剪贴板功能?

wpf - 根据列表框中数据库中的记录动态添加行 mvvm mvvm light

javascript - Jasmine spy On javascript getter 导致 karma 挂起

javascript - 将 ajax success() 事件中的数据与同一 .js 文件中的其他事件处理程序一起使用

javascript - 打印网页而不显示打印对话框和此网页

c# - 内容对话框文本框值检索

c# - 如果选择列表项,则实现 CanExecute 以启用按钮

javascript - 为什么这个 promise 链会立即解决?

javascript - 当变量在全局范围内定义时,为什么 for 循环需要很长时间?