前端Vue专辑

Vue组件基本使用

2018-05-10  本文已影响12人  Koko_滱滱

[TOC]

todolist功能开发

<body>
    <div id="app">
        <div>
            <input v-model="newItem" />
            <button @click="handleClick">提交</button>
        </div>
        <ul>
            <li v-for="(item,index) of list" :key="index">{{item}}</li>
        </ul>
    </div>
    <hr/>
</body>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            newItem: '',
            list: ["text1", "text2"]
        },
        methods: {
            handleClick: function () {
                this.list.push(this.newItem);
                this.newItem = '';//数据新增后,让输入框处于空
            }
        }

    })
</script>

每次点击提交,就将输入框中的内容添加到列表上进行显示。
用到了数据的双向绑定、事件绑定、v-for指令等知识

todolist组件拆分

组件的定义

    Vue.component("todo-item",{
        template:"<li>item</li>"
    })
<todo-item></todo-item>

使用Vue.component定义的组件,称为全局组件。定义后可以在任意地方使用。

如果要定义局部组件

<script>
    var TodoItem = {
        template:"<li>item</li>"
    }

    var app = new Vue({
        el: '#app',
        comments:{
            'todo-item':TodoItem//局部组件的注册
        },
        data: {
            newItem: '',
            list: ["text1", "text2"]
        },
        methods: {
            handleClick: function () {
                this.list.push(this.newItem);
                this.newItem = '';
            }
        }

    })
</script>

局部组件在定义后,需要在使用的Vue实例中进行声明

组件化后的todolist

<body>
    <div id="app">
        <div>
            <input v-model="newItem" />
            <button @click="handleClick">提交</button>
        </div>
        <ul>
            <todo-item v-for="(item,index) of list" :key="index" :content="item"></todo-item>
        </ul>
    </div>
    <hr/>
</body>
<script>

    Vue.component("todo-item",{
        props:["content"],//接收外部参数名
        template:"<li>{{content}}</li>"
    })

    var app = new Vue({
        el: '#app',
        data: {
            newItem: '',
            list: ["text1", "text2"]
        },
        methods: {
            handleClick: function () {
                this.list.push(this.newItem);
                this.newItem = '';
            }
        }

    })
</script>

点击提交后,item的值以content为名传递给了组件,组件再通过{{content}}获取值
也就是说,父组件通过属性的形式,向子组件传递值。

目前为止,我们把<li>标签拆成了组件进行管理

组件与实例的关系

每一个Vue组件,就是一个Vue实例

在一个Vue项目中,都是有很多个Vue实例组成的。

如果一个Vue实例没有定义模板,那么挂载点下的所有内容会被当做模板

实现todolist的删除功能

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

<head>
    <meta charset="UTF-8">
    <title>Hello</title>
    <script src="../vue/dist/vue.js"></script>

</head>

<body>
    <div id="app">
        <div>
            <input v-model="newItem" />
            <button @click="handleClick">提交</button>
        </div>
        <ul>
            <!-- 父组件监听子组件的delete事件 -->
            <todo-item v-for="(item,index) of list" :key="index" :content="item" :index="index" @delete="handleDelete"></todo-item>
        </ul>
    </div>
    <hr/>
</body>
<script>

    Vue.component("todo-item", {
        props: ["content", "index"],//接收外部参数名
        template: "<li @click='handleClick'>{{content}}</li>",
        methods: {
            handleClick: function () {
                this.$emit("delete", this.index);//向外触发delete事件
            }
        }
    })

    var app = new Vue({
        el: '#app',
        data: {
            newItem: '',
            list: ["text1", "text2"]
        },
        methods: {
            handleClick: function () {
                this.list.push(this.newItem);
                this.newItem = '';
            },
            handleDelete:function(index){
                this.list.splice(index,1);//删除一条数据
            }
        }

    })
</script>

</html>

实现了点击列表后,删除数据的功能

上一篇下一篇

猜你喜欢

热点阅读