【问题标题】:Passing the Properties of an Object in Vue.js在 Vue.js 中传递对象的属性
【发布时间】:2018-06-02 18:47:40
【问题描述】:

我从 vue.js 指南中了解到

您可以使用不带参数的 v-bind(v-bind 代替 v-bind:prop-name)。

我觉得它没有任何价值。

Vue.component('click-count',{
  data: function(){
    return{
      names: {
        firstName: 'kuldeep',
        lastName: 'Babbar'
      }
    }
  },
  template: `
    <div class="blog-post">
      <p>{{names.firstName}}</p>
    </div>
  `
})
var app = new Vue({
  el: '#root'
});
<div id="root">
  <div >
    <click-count v-bind="names"></click-count>
  </div>
</div>

** 新:忘记添加此图片**

谁能解释一下?

【问题讨论】:

    标签: vue.js vue-directives


    【解决方案1】:

    首先,如果您尝试将对象“名称”从根传递给子click-count 组件,则数据必须位于“根”内:

    var app = new Vue({
      el: '#root',
      data(){
        return{
          names: {
            firstName: 'kuldeep',
            lastName: 'Babbar'
          }
        }
    })
    

    现在,您使用不带参数的 v-bind 所做的是将对象“names”传递给组件,但不带命名的“names”参数:

    <click-count v-bind="names"></click-count>
    

    相同
    <click-count v-bind="{ firstName: 'kuldeep', lastName: 'Babbar' }"></click-count> 
    

    最后,您使用 v-bind(带或不带参数)传递给组件的是 props,如果您想在模板中使用它们,则需要声明它们。
    但在您的情况下,click-count 组件不知道 names 的含义:

    Vue.component('click-count',{
      props:['firstName', 'lastName'],
      template: `
        <div class="blog-post">
        <p>{{ firstName }}</p>
        </div>
      `
    })
    var app = new Vue({
      el: '#root',
      data(){
        return{
          names: {
            firstName: 'kuldeep',
            lastName: 'Babbar'
          }
        }
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
    <div id="root">
      <div >
        <click-count v-bind="names"></click-count>
      </div>
    </div>

    编辑:解释您链接的图像

    正如它所说的“如果你想将一个对象的所有属性作为道具传递”意味着没有参数(&lt;blog-post v-bind="post"&gt;&lt;/blog-post&gt;),“BlogPost”组件的道具是全部帖子的属性

    props : ['id', 'title']
    

    在组件模板中这样使用:&lt;p&gt;Title: {{ title }}&lt;/p&gt;

    VS 当“post”对象作为带有参数 (&lt;blog-post v-bind:post="post"&gt;&lt;/blog-post&gt;) 的道具传递时,它位于一个唯一的命名参数(而不是它的属性)下:

    props : ['post']
    

    在组件模板中这样使用:&lt;p&gt;Title: {{ post.title }}&lt;/p&gt;

    【讨论】:

    • 谢谢,我知道了,但你能解释一下我添加的那张图片吗?其实我问的是“道具”。
    • 在您链接的图片中,如果您查看指南的页面顶部,您可以看到:“此页面假定您已经阅读过Components Basics。如果您是新手,请先阅读到组件。” 检查 this section 解释如何将 props 从父组件传递到子组件。
    • @Babbar 我更新了我的答案来解释你链接的图片,我希望它有所帮助。
    • 好的,再次感谢,我明白了。这意味着我必须将对象的属性(或直接对象的名称)添加为道具。
    • 您的接收组件示例(带有来自传递对象的键列表)是文档中缺少的内容。直到现在我才意识到我必须枚举道具中的键(这看起来很明显,但这里的文档可能更清楚)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多