老师好,我有两个问题

老师好,我有两个问题

1)v-for循环出来的数据如果一定要用v-blind接受吗

  2)这里怎么用作用插槽的方法打印出每个选项卡呢

我是想通过作用域插槽打印出上面的选项卡的,但是一直都在报错

3)class的部分,为什么加入多个的class呢,如果用data数据的话是不是从父组件里获得
<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title></title>

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

    <style>

        .swtich{display: flex;justify-content: center;align-items: center;}

        .btn{padding: 10px 20px;

            border-radius: 5px;

            outline: none;

            border: 1px solid gray;

            cursor: pointer;}

        .actived{background-color: gray;}

    </style>

</head>

<body>

    <div id="root">

        <div class="swtich">

            

            <div v-for="(item,index) of list" :index= index @click="handleClick(index)" :class="{actived:actedindex===index,btn:true}">{{item}}</div>

        </div>

        <component :is="actived[actedindex]">

    </div>

    <script>

        Vue.component('TabBarone',{

            template:'<div>前端工程师</div>'

        })


        Vue.component('TabBartwo',{

            template:'<div>Java工程师</div>'

        })


        Vue.component('TabBarthree',{

            template:'<div>软件测试工程师</div>'

        })


        var vm = new Vue({

            el: "#root",

            data:{

                list:['前端工程师', 'Java工程师', '软件测试工程师'],

                actedindex:"0",

                actived:["TabBarone","TabBartwo","TabBarthree"]

            },

            methods:{

                handleClick:function(index){

                    this.actedindex = index

                }

            }

        })

    </script>

</body>

</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕久久 2020-07-30 11:34:02

同学你好,问题解答如下:

1.当父组件给子组件传值时,才会用到props接收,即子组件中,用到的某个数据,需要由父组件传过来,此时就需要props接收,如下:

http://img1.sycdn.imooc.com//climg/5f223f60091b879c08800648.jpg

而这个例子中,子组件不需要父组件传值,所以不用props接收。

同学这样理解也可以,即子组件的内部不使用父组件上的数据,就不用props接收。

2. 如果想使用多个插槽,可以如下这样写:

http://img1.sycdn.imooc.com//climg/5f223f840922613213500327.jpghttp://img1.sycdn.imooc.com//climg/5f223f8809613b1210580343.jpg

3. test组件内的插槽使用的数据list,是子组件内部的,该list不是从父组件接收来的。子组件利用该数据,进行循环遍历多个插槽,然后在插槽上绑定数据,绑定的这些数据,会传到外面,即传到父组件内,过程如下:

http://img1.sycdn.imooc.com//climg/5f223fa10944cc6e12260646.jpg

同学可以再理解一下。

祝学习愉快!

好帮手慕久久 2020-07-29 19:08:13

同学你好,问题解答如下:

1. v-bind是给元素绑定数据,它是框架规定的固定用法,当给div绑定index属性时,只能用“:index= index”这种写法(“:”是v-bind的简写形式)。

2. 改写可参考如下形式:

http://img1.sycdn.imooc.com//climg/5f2158730977136408010619.jpghttp://img1.sycdn.imooc.com//climg/5f21587709ba5cf912770436.jpg

3. class部分,由于按钮的样式,是受两个类名控制的,如下:

http://img1.sycdn.imooc.com//climg/5f2158830917f2bc20500436.jpg

所以此处写了两个类名。

class中的数据“actedindex”是从父组件data中获取的。

另外,初始状态下,第一个按钮样式应该是激活状态的,所以需要修改如下:

http://img1.sycdn.imooc.com//climg/5f21588e09017c4045680343.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快!

  • 提问者 慕雪9296518 #1
    1)v-bind绑定数据不需要props接收吗??好像之前都有写,还是说只要模板templatwqe中没用到或者没在data或者method中作为值或者参数就不用接收??? 2)如果选项卡三个都用作用域插槽的方式呢? <template slot-scope="props"> <div>{{props.items}} </template> vue.component({ template:<div><slot v-for="item for list" :item=item><slot></div> }) 并且这里list不是从父组件接收数据吗,我看课件说的解释是当子组件要做循环时或者它的一部分要外部传递时,这个外部传递不就是从父组件中直接获取list数据吗
    2020-07-30 09:49:22
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师