美文网首页
Vue.js组件基础知识

Vue.js组件基础知识

作者: nzdnllm | 来源:发表于2018-12-11 19:01 被阅读0次

    1.TodoList的基本编写与实现结果

    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>TodoList</title>
       <script src="vue.js"></script>
    </head>
    <body>
      <div id="root">
        <div>
            <input v-model="inputValue" />
            <button @click="handleSubmit">提交</button>
        </div>
        <ul>
            <li v-for="(item,index) of list" :key="index">{{item}}</li>
        </ul>
      </div>
      <script>
        new Vue({
            el: "#root",
            data: {
                inputValue: '',
                list: []
            },
            methods:{
                handleSubmit: function () {
                    this.list.push(this.inputValue)
                    this.inputValue = ''
                }
            }
        })
      </script>
    </body>
    </html>
    
    TodoList预览展示

    2.定义组件
    (1)定义全局组件

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

    使用方式:

       <ul>
           <todo-item></todo-item>
       </ul>
    

    (2)定义局部组件

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

    定义局部组件无法直接使用,需要对组件进行注册

    new Vue({
            el: "#root",
            components:{
                'todo-item':TodoItem
            }
        })
    

    3.向组件中传递参数
    (1)在父组件中定义需要传递的参数

     <ul>
            <!--定义需要传递的属性content,并将变量item赋值给content-->
            <todo-item v-for="(item,index) of list" :key="index" :content="item"></todo-item>
     </ul>
    

    (2)创建全局组件,使用props接收传入的参数,即可使用传递的参数

     Vue.component('todo-item', {
            //接收传入的content属性,在创建组件时进行接收,通过props
            props:['content'],
            //使用传入的content属性,此时content属性可用
            template: '<li>{{content}}</li>'
      })
    

    4.组件与实例之间的关系
    vue中的每个组件都是一个vue的实例,每一个vue的实例都是以一个vue组件
    5.TodoList删除功能的实现
    重点:
    父组件通过属性的形式向字组件传递数据
    子组件通过发布与父组件相同的事件传递数据
    (1)父组件定义需要传递给子组件的属性 index

      <todo-item
                    v-for="(item,index) of list"
                    :key="index"
                    :content="item"
                    :index="index">
      </todo-item>
    

    (2)子组件设置click时间,发布delete事件给父组件

      Vue.component('todo-item', {
            //接收传入的content属性,在创建组件时进行接收,通过props
            props:['content','index'],
            //使用传入的content属性,此时content属性可用
            //设置子组件的点击事件click
            template: '<li @click="handleClick">{{content}}</li>',
            methods:{
                // 子组件内部通过$emit 发布delete属性
                handleClick:function () {
                    this.$emit('delete',this.index)
                }
            }
        })
    

    (3)在父组件中给与子组件相同的事件绑定方法

       <todo-item
                    v-for="(item,index) of list"
                    :key="index"
                    :content="item"
                    :index="index"
                    @delete="handleDelete">
       </todo-item>
    

    (4)编写绑定的方法

     handleDelete:function (index) {
                    this.list.splice(index,1)
      }
    

    (5)完整代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>TodoList</title>
      <script src="vue.js"></script>
    </head>
    <body>
      <div id="root">
          <div>
            <input v-model="inputValue" />
            <button @click="handleSubmit">提交</button>
        </div>
        <ul>
            <!--定义需要传递的参数content,并将变量item赋值给content-->
            <!--定义需要传递给子组件的属性index-->
            <todo-item
                    v-for="(item,index) of list"
                    :key="index"
                    :content="item"
                    :index="index"
                    @delete="handleDelete">
            </todo-item>
        </ul>
    </div>
    <script>
        // 创建组件
        Vue.component('todo-item', {
            //接收传入的content属性,在创建组件时进行接收,通过props
            props:['content','index'],
            //使用传入的content属性,此时content属性可用
            //设置子组件的点击事件click
            template: '<li @click="handleClick">{{content}}</li>',
            methods:{
                // 子组件内部通过$emit 发布delete属性
                handleClick:function () {
                    this.$emit('delete',this.index)
                }
            }
        })
        new Vue({
            el: "#root",
            data: {
                inputValue: '',
                list: []
            },
            methods:{
                handleSubmit: function () {
                    this.list.push(this.inputValue)
                    this.inputValue = ''
                },
                handleDelete:function (index) {
                    this.list.splice(index,1)
                }
            }
        })
      </script>
    </body>
    </html>

    相关文章

      网友评论

          本文标题:Vue.js组件基础知识

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