vue组件

Posted cowboybusy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue组件相关的知识,希望对你有一定的参考价值。

1.component注册组件:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>

<body>
    <div id="app-7">
        <ol>
            <todo-item v-for="item in groceryList" v-bind:todo="item" v-bind:key="item.id">
            </todo-item>
        </ol>
    </div>
</body>
<script type="text/javascript">
Vue.component(todo-item, {
    props: [todo],
    template: <li>{{ todo.text }}</li>
});
var app7 = new Vue({
    el: #app-7,
    data: {
        groceryList: [
            { id: 0, text: 蔬菜 },
            { id: 1, text: 奶酪 },
            { id: 2, text: 随便其它什么人吃的东西 }
        ]
    }
});
</script>

</html>

2.可以把component中的组件抽出来,用extend方法定义组件,component负责注册组件

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>

<body>
    <div id="app">
        <ol>
            <todo v-for="item in groceryList" v-bind:text="item">
            </todo>
        </ol>
    </div>
</body>
<script type="text/javascript">

// 构建一个子组件
var todoItem = Vue.extend({
    template: "<li> {{ text }} </li>",
    props: {
        text: {
            type: String,
            default: ‘‘
        }
    }
});

Vue.component(‘todo‘, todoItem);

new Vue({
    el: ‘#app‘,
    data: {
        groceryList: [
            ‘蔬菜‘,
            ‘奶酪‘,
            ‘随便其它什么人吃的东西‘
        ]
    }
});
</script>

</html>

  

3.组件可以嵌套使用:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>

<body>
    <div id="app">
       <todo :todo-data="groceryList"></todo>
    </div>
</body>
<script type="text/javascript">

// 构建一个子组件
var todoItem = Vue.extend({
    template: "<li> {{ text2 }} </li>",
    props: {
        text2: {
            type: String,
            default: ‘‘
        }
    }
});

// 构建一个父组件
var todoWarp = Vue.extend({
    template: `
        <ul>
            <todo-item 
                v-for="(item, index) in todoData"
                v-bind:text2="item.text"
            ></todo-item>
        </ul>
    `,
    props: {
        todoData: {
            type: Array,
            default: []
        }
    },
    // 局部注册子组件
    components: {
        todoItem: todoItem
    }
});
// 注册到全局
Vue.component(‘todo‘, todoWarp);

new Vue({
    el: ‘#app‘,
    data: {
        groceryList: [
            { id: 2, text: ‘蔬菜‘ },
            { id: 3, text: ‘奶酪‘ },
            { id: 4, text: ‘随便其它什么人吃的东西‘ }
        ]
    }
});
</script>

</html>

  

也可以使用v-text指令替代v-bind,v-text指令设置元素的文本,这样的话,就不需要定义text属性了

以下效果跟上面一样:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/vue/2.4.2/vue.min.js"></script>
</head>

<body>
    <div id="app">
       <todo :todo-data="groceryList"></todo>
    </div>
</body>
<script type="text/javascript">


// 构建一个子组件
var todoItem = Vue.extend({
    template: "<li></li>",
    
});

// 构建一个父组件
var todoWarp = Vue.extend({
    template: `
        <ul>
            <todo-item 
                v-for="(item, index) in todoData"
                v-text="item.text"
            ></todo-item>
        </ul>
    `,
    props: {
        todoData: {
            type: Array,
            default: []
        }
    },
    // 局部注册子组件
    components: {
        todoItem: todoItem
    }
});
// 注册到全局
Vue.component(‘todo‘, todoWarp);

new Vue({
    el: ‘#app‘,
    data: {
        groceryList: [
            { id: 2, text: ‘蔬菜‘ },
            { id: 3, text: ‘奶酪‘ },
            { id: 4, text: ‘随便其它什么人吃的东西‘ }
        ]
    }
});
</script>

</html>

  

:todo-data跟v-bind:todo-data效果一样

 

以上是关于vue组件的主要内容,如果未能解决你的问题,请参考以下文章

vue3中的fragment(片段)组件

vue.js 2 - 将单个文件组件的 html 片段提取到独立文件中

Vue组件之全局组件与局部组件

Vue组件之全局组件与局部组件

vue-个人学习----组件

vue视频学习笔记05