美文网首页
VUE组件使用中的细节

VUE组件使用中的细节

作者: 流年逝去sky | 来源:发表于2019-05-01 12:53 被阅读0次

    table中使用组件的细节:直接使用<row></row>写法 发现<tr>没在<tbody>面


    <row></row>
    <div id="root">
                <table>
                    <tbody>
                        <row>修改前的</row>
                        <row></row>
                        <row></row>
                    </tbody>
                </table>
            </div>
            <script>
                Vue.component('row',{
                    template:'<tr><td>this is a row</td></tr>'
                })
                var vm = new Vue({
                    el:"#root"
                })
            </script>
    

    改为<tr is="row"></row> 查看dom显示正常


    image.png
    <div id="root">
                <table>
                    <tbody>
                        <tr is="row">修改后的</row>
                        <tr is="row"></row>
                        <tr is="row"></row>
                    </tbody>
                </table>
            </div>
    
            <script>
                Vue.component('row',{
                    template:'<tr><td>this is a row</td></tr>'
                })
                var vm = new Vue({
                    el:"#root"
                })
            </script>
    


    子组件中的data比如用return返回一个object 这样做是确保每个子组件通过函数返回object 每个组件有自己独立的数据空间

    <script>
                Vue.component('row',{
                    data:function(){
                        return{
                            content:'this is a content'
                        }
                    },
                    template:'<tr><td>{{content}}</td></tr>'
                })
                var vm = new Vue({
                    el:"#root"
                })
            </script>
    


    ref 可以用来标记dom元素 然后使用 this.$refs. 来表示标记的dom元素

        <body>
            <div id="root">
                <div ref='hi' @click="handleClick">hello world</div>
            </div>
    
            <script>
                var vm = new Vue({
                    el: "#root",
                    methods: {
                        handleClick: function() {
                            alert(this.$refs.hi.innerHTML)
                        }
                    }
                })
            </script>
        </body>
    

    父组件传递给子组件时 子组件参数校验
    content:String 字符串 , Number数字
    requird:true 必传
    default:默认值 如果不传就用默认值
    validator 校验组件的值

    <div id="root">
                <child content="123456"></child>
            </div>
    
            <script>
                Vue.component('child', {
                    props: {
                        content: {
                            type: [String, Number],
                            required: false,
                            default: 'default vaue',
                            validator: function(value) {
                                return(value.length > 5)
                            }
                        }
                    },
                    template: '<div>{{content}}</div>'
                })
    
                var vm = new Vue({
                    el: '#root'
                })
            </script>
    

    props属性:父组件使用子组件时 向子组件传递参数 如果子组件使用props接收了参数

    非props特性:父组件使用子组件时 向子组件传递参数 子组件没有申明props来接收是无法使用这个参数的 另外非props特性 会显示在dom中 image.png

    子组件中绑定原生click事件:@click.native="handleClick"

    <body>
            <div id="root">
                 <child @click.native="handleClick"></child>
            </div>
    
            <script>
                Vue.component('child',{
                    template:'<div>Child</div>'
                
                })
                
                var vm = new Vue({
                    el: '#root',
                    methods:{
                        handleClick:function(){
                            alert('handleClick')
                        }
                    }
                })
            </script>
        </body>
    

    Vue中的插槽的使用

    <body>
            <div id="root">
                <bcontent>
                    <div class="hd" slot='hd'>header</div>
                    <div class="ft" slot='ft'>footer</div>  
                </bcontent>
            </div>
    
            <script type="text/javascript">
                Vue.component('bcontent', {
                    template: '<div><slot name="hd"><h1>default header</h1></slot ><div class="content">content</div><slot name="ft"></slot></div>'
                })
    
                var vm = new Vue({
                    el: '#root'
                })
            </script>
        </body>
    

    相关文章

      网友评论

          本文标题:VUE组件使用中的细节

          本文链接:https://www.haomeiwen.com/subject/jvginqtx.html