zoukankan      html  css  js  c++  java
  • Vue: slot的使用

    slot插槽

    为组件提供扩展性

    插槽定义: 在组件中使用<slot name="jumin"></slot>

    <template>
        <div>
            <p>{{userInfo.length}} Titles</p>
            <slot name="jumin" :data="list1"></slot>
            <ul class="movie-list">
                <li v-for="movie in userInfo" :key="movie.id">
                    {{movie.title}} - {{movie.year}}
                     <span class="float-right">
    
                        <a class="imdb" :href="'https://www.imdb.com/find?q=' + movie.title" target="_blank"
                            title="Find this movie on IMDb">IMDb</a>
                        <button @click="btnClick(movie)">点击我将把内容传递给父组件</button>
                        <button @click="fater">访问父组件</button>
                    </span>
                </li>
            </ul>
        </div>
    </template>
    
    <script>
    export default {
        name: 'Main',
        // props: ['movies']    // 数组写法
        //  对象写法,可以类型限制,设置默认值
        props: {
            // 对象或者数组是default 需要是个方法 
            userInfo: {
                type: Array,
                default() {
                    return []
                }
            }
        },
        data() {
            return {
                // 通过slot 将该data传递给插槽,使用插槽时 就会拥有该data属性
                list1: [1,2,3]
            }
        },
        methods: {
            btnClick: function (arg) {
                // console.log(arg)
                // 发射事件,给父组件, (事件名称, 参数), 事件名称推荐始终使用 kebab-case 的事件名。
                this.$emit('item-click', arg)
            },
            fater: function () {
                // 访问父组件
                console.log(this.$parent)
            }
        }
    }
    </script>
    
    <style>
    
    </style>
    

    插槽使用标签中使用 slot="jumin"

    <template>
        <div>
            <Nav></Nav>
            <Main :userInfo="movies">
                <!-- slot-scope 将获取到插槽对象 -->
    <form method="post" slot="jumin" slot-scope="slot">
        <!-- 获取到插槽定义时绑定的data属性 -->
        <h1>{{slot.data}}</h1>
        Name <input type="text" name="title" autocomplete="off" required>
        Year <input type="text" name="year" autocomplete="off" required>
        <input class="btn" type="submit" name="submit" value="Add">
    </form>
            </Main>
            <Foter></Foter>
        </div>
    </template>
    
    
    <script>
    import Main from '../components/Main'
    import Nav from '../components/Nav'
    import Foter from '../components/Foter'
    
    
    export default {
        name: 'Manager',
        components: {
            Main,Foter,Nav
        },
        data() {
            return {
                movies: [
                    {
                        id: 1,
                        title: "西游记",
                        year: "1997"
                    }
                ]
            }
        }
    }
    </script>
    
    
    <style>
    
    </style>
    

    源码地址: https://gitee.com/zy7y/hello-fast-api-vue

    作者:zy7y
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    本周一些笔记
    [atlas] UpdatePanel失灵的解决办法
    VVR常见案例
    html5与css3权威指南读书笔记第七章 本地存储 Amy
    html5文件 Amy
    javascript原型的引入 Amy
    jquery控制背景图片的移动 Amy
    cssfloat如何改变块级元素、行内元素的性质 Amy
    html5与css3权威指南读书笔记css3中的动画功能 Amy
    html5 表单 Amy
  • 原文地址:https://www.cnblogs.com/zy7y/p/14495021.html
Copyright © 2011-2022 走看看