vue的作用域插槽的问题

完整代码:
<!DOCTYPE html>
<html lang="en">
<head>

<meta charset="UTF-8">
<title>Vue中的作用域插槽</title>
<link rel="stylesheet" href="./main.css">
<script src="./vue.js"></script>

</head>
<body>

<h1>Vue中的作用域插槽</h1>
<hr>
<p><strong>一个可从子组件获取数据的可复用的插槽</strong></p>
<div id="app">
    <child>
    <div slot-scope='news'>
        <li v-for='item in news.news' >{{item}}</li>
        <li>{{news}}</li>
        <li>{{news.news}}</li>
    </div>
    </child>
</div>
<script>
    Vue.component('child',{
        data(){
            return{
                news:[
                    '以为傅恒买了iphone'
                       ,'苏醒恋情'
                       ,'F4 上海'
                       ,'陈意涵许富翔结婚'
                       ,'欧洲攻略'
                       ,'饿了么致歉'
                       ,'纪凌尘否认出轨'
                       ,'陈意涵宝宝性别'
                       ,'美岐宣仪紫宁回队'
                    ],
            }
        },
        template:`
                <div>
                新浪微博热搜:
                <slot :news='news'></slot>
                </div>
                `
    })
    var vm = new Vue({
        el:'#app',

    })
</script>

</body>
</html>
问题:作用域插槽通过属性绑定了news数组,为啥通过slot-scope='news'接收过来的却是一个对象?望大佬解释一下,谢谢

clipboard.png

阅读 2.9k
2 个回答

因为slot-scope仅暴露出来一个scope对象,并不以你的命名转移
也许是因为只有一个属性让你看起来有点绕,看下面这个例子也许能让你更容易理解一些

<slot :news='news' :index="index"></slot>
<template slot-scope="scope">
  {{ scope.news }}
  {{ scope.index }}
</template>

你如果想让代码更直观一点,可以直接结构slot-scope

<template slot-scope="{ news }">
  {{ news }}
</template>

官网就是结构后用的呀
插槽

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题