VUE组件使用中的细节

2019-05-01  本文已影响0人  流年逝去sky

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>
上一篇下一篇

猜你喜欢

热点阅读