【问题标题】:Cannot pass properties to a component in a slot in vue.js?无法将属性传递给 vue.js 中插槽中的组件?
【发布时间】:2016-11-29 17:27:57
【问题描述】:

我正在尝试使用 Vue.js (v2.1.3) 创建嵌套组件,但我不知道如何在它们之间绑定数据。

这个JSFiddle 展示了我想要实现的目标。

HTML...

 <div id="test">
   <comp1>
     <comp2 :message="message"></comp2>
   </comp1>
 </div>

JS...

    var template = `<div>
      <comp2 :message="message"></comp2>
      <slot :message="message"></slot>
    </div>`;

    Vue.component("comp1", {
      template: template,
      data: function() {
        return {
          message: "Hello"
        };
      }
    });

    var template2 = `<div>
       <span>Message is: {{ message }}</span>
    </div>`;

    Vue.component("comp2", {
      template: template2,
      props: ["message"]
    });

    new Vue({
      el: "#test"
    });

如果我直接在父组件的模板中声明子组件,则数据传递正确。但是当子组件被分配到父组件中的一个槽时,数据就不会被传递。

我已经阅读并重新阅读了文档,但无法弄清楚我想做的事情是否可行,如果可以,我做错了什么。

任何解决此问题的帮助将不胜感激!

【问题讨论】:

    标签: javascript vue-component vue.js


    【解决方案1】:

    要使用作用域插槽,请将父级的内容包装在带有 scope 属性的 template 标记中:

    <comp1>
      <template scope="{ message }">
        <comp2 :message="message"></comp2>
      </template>    
    </comp1>
    

    这是你更新的小提琴:https://jsfiddle.net/Lbz6Ly4a/1/

    【讨论】:

    • 感谢您提供此答案-我可以看到它在小提琴中运行良好,但由于某种原因,它在我拥有它的上下文中对我不起作用(我正在以编程方式构建DOM,然后在其上创建一个新的 Vue)...不知道有什么区别,但这确实帮助了我进步,非常感谢。
    • @DaveDraper guide 说这是因为2.1.0,也许检查你的版本?
    • 感谢您的建议,但我使用的是 2.1.3
    猜你喜欢
    • 2020-06-05
    • 2020-02-14
    • 2020-03-12
    • 2022-11-25
    • 2018-09-14
    • 1970-01-01
    • 2018-06-22
    • 2020-12-01
    • 2016-09-02
    相关资源
    最近更新 更多