传给父组件的指令命名,是不是可以随意定义?

传给父组件的指令命名,是不是可以随意定义?

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

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

6回答
好帮手慕星星 2020-09-23 11:07:50

同学你好,非常抱歉,老师第一次测试的时候是在vue文件中,第二次没有测试点击加1的效果,所以没有复现同学的问题。

在html中和在vue文件中是有区别的:

1、在html结构中大写会解析中小写的,所以报错ToList中绑定的是dele,触发的是Dele,无法实现效果。

改为小写的事件名称,刷新页面,关于dele的警告就没有了。警告是v-for的

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

推荐添加上key

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

2、在vue文件中绑定的是什么就会解析为什么,绑定要与触发名称保持一致

自己再测试下,祝学习愉快!

  • 提问者 慕仰5025445 #1
    嗯嗯,非常感谢老师
    2020-09-23 11:29:30
好帮手慕星星 2020-09-23 09:46:08

同学你好,黄色的是警告不是报错

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

意思是ToList中大写事件名称一般会被解析为小写的,而$emit中触发的是大写的事件名称,所以会有警告。建议事件名称写为小写的。

祝学习愉快!

  • 提问者 慕仰5025445 #1
    但是老师,我点击Dele所在的子组件,没有触发父里面的函数呀,没有达到+1的效果,我改回小写就正常了;还有ToList这个,我都改成小写的了,还是一样的黄色警告Dele
    2020-09-23 09:49:03
提问者 慕仰5025445 2020-09-22 20:30:13

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

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

    <title>Document</title>

    <script src=./vue.js></script>

</head>

<body>

    <div id='app'>

        <input type="text" v-model='inputValue' placeholder="请填写内容">

        <button v-on:click='btnClick'>提交</button>

        <button v-on:click='clear'>清除</button>

        <ul>

            <to-list v-bind:content='item'

                     :index='index'

                     v-for='(item,index) in list'

                     @Dele='handleItemDelete'>

            </to-list>

            <!-- <li v-for='item in list'>{{item}}</li> -->

        </ul>

    </div>

    <script>

        // Vue.component('ToList',{

        //     props:['content'],

        //     template:'<li >{{content}}</li>'

        // });

        var ToList={

            props:['content','index'],

            template:"<li @click='itemClick'>{{content}}</li>",

            methods: {

                itemClick:function(){

                    // alert('dddd');

                    this.$emit("Dele",this.index);

                }

            },

        }

        var app = new Vue({

            el:'#app',

            data:{

                list:[],

                inputValue:''

            },

            components:{

                ToList:ToList

            },

            methods: {

                btnClick:function(){

                    // alert('dddd');

                    if(this.inputValue !==''){

                        this.list.push(this.inputValue);

                        this.inputValue='';

                    }else{

                        this.inputValue='请填写内容';

                    }

                    

                },

                clear:function(){

                    this.list=[]

                },

                handleItemDelete:function(index){

                    // alert( typeof(this.list[index]));

                    this.list.splice(index,1,Number(this.list[index])+1);

                    // this.list[index] +=1;


                }

            }

        });

    </script>

</body>

</html>

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

好帮手慕星星 2020-09-22 18:25:46

同学你好,老师这边测试是可以的,自定义事件名称可以大写,也可以和函数名同名。例如:

demo1中引入demo3文件

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

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

点击p标签,触发Dele事件,执行Dele函数,输出1

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

自己可以举例测试下,要记得两个组件中事件名称保持一致。但是一般推荐的是小写的事件名称。

祝学习愉快!

  • 提问者 慕仰5025445 #1
    老师我自己试了,有报错,所以跟你确认下,你看下我上面的代码,
    2020-09-22 20:29:24
提问者 慕仰5025445 2020-09-22 14:01:18
好帮手慕星星 2020-09-22 10:10:42

同学你好,是的,一般自定义事件名称可以随意定义,合法就好。

祝学习愉快!

  • 提问者 慕仰5025445 #1
    老师还有个问题,上面的两个图片,事件可以随意命名,dele但是不能首字母大写?不能和后面等于的函数名同名?
    2020-09-22 14:03:13
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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