本文章仅用作于个人学习笔记(蓝后我就可以乱写啦)复制代码

一、组件化的优点当TodoList的todo item越来越多的时候,我们应该把它拆分成一个组件进行开发,维护。组件的出现,就是为了拆分Vue实例的代码量,让我们以不同的组件,来划分成不同功能模块,然后拼接成一个完整的页面。将来需要怎样的功能,就去调对应的组件就好了。

目前我能理解的组件化开发的优点如下:

1) 提高开发效率。2) 方便重复使用。3) 提升可维护性。复制代码插一张官方文档的图:

二、注册组件在脚手架中我们选中使用 .vue单文件来开发。一个.vue文件中具有完整的 template(html)、script、style标签。

.vue的单文件可以获得:

1) 完整语法高亮2) CommonJS 模块3) 组件作用域的 CSS ( <style scoped></style> ) 复制代码1.先创建一个TodoList.vue文件到components文件夹下,创建完后,我们需要在根组件App.vue中引入TodoList.vue并注册组件。//导入的组件需要放入components中复制代码

查看是否引入成功:

2.接下来我们把之前的li标签的内容移植到TodoList.vue中。父子组件之间的通行我们使用props和$emit。

子组件使用 props 来接收 父组件传来的值子组件使用 $emit 将事件和数据 发射出去。需要子组件数据的父组件添加一个自定义事件用来监听子组件1)在父组件(App.vue)的todo-item中把数据“绑定到”自定义属性 :content(item的文字) , :time(item的创建时间), :index(数组的下标),并添加事件@delect监听子组件的事件

<todo-item

          v-for="(item,index) in list"

          :key="index"

          :content="item.text"

          :time="item.time"

          :index="index"

          @delect="handleDelect"

        ></todo-item>

复制代码2)子组件(TodoList.vue)通过props来接收父组件传来的数据渲染页面。创建点击事件调用方法handleDelect方法,方法中使用 $emit 将下标index发射出去(父组件接收用来删除对应的item)

<template>

  <li>

    <div>{{content}}</div>

    <small>

      <span>创建于:{{time}}</span>

    </small>

    <button @click="handleDelect">删除</button>

  </li>

</template>

<script>

export default {

  props: ["content", "time", "index"],

  methods: {

    handleDelect() {

      this.$emit("delect", this.index);

    }

  }

};

</script>

//复制代码

//完整代码:

//App.vue

<template>

  <div id="app">

    <div>

      <div>

        <input type="text" placeholder="添加便签" v-model.trim="inputValue">

        <button @click="handleSubmit">添加</button>

      </div>

      <ul>

        <!-- 把这个组件作为自定义元素来使用 -->

        <todo-item

          v-for="(item,index) in list"

          :key="index"

          :content="item.text"

          :time="item.time"

          :index="index"

          @delect="handleDelect"

        ></todo-item>

      </ul>

    </div>

  </div>

</template>

<script>

// import (引入文件的文件命名) from ("文件的路径")

import todolist from "./components/TodoList.vue";

export default {

  name: "app",

  // ("组件名"() : (引入文件的文件命名)

  components: {

    "todo-item": todolist

  },

  data() {

    return {

      inputValue: "",

      list: []

    };

  },

  methods: {

    handleSubmit() {

      if (this.inputValue != "") {

        this.list.push({

          text: this.inputValue,

          time: new Date().toLocaleString()

        });

        this.inputValue = "";

      }

    },

    handleDelect(index) {

      this.list.splice(index, 1);

    }

  }

};

</script>复制代码

TodoList.vue

<template>

  <li>

    <div>{{content}}</div>

    <small>

      <span>创建于:{{time}}</span>

    </small>

    <button @click="handleDelect">删除</button>

  </li>

</template>

<script>

export default {

  props: ["content", "time", "index"],

  methods: {

    handleDelect() {

      this.$emit("delect", this.index);

    }

  }

};

</script>

<style scoped>

</style>复制代码

错误可能很多,但我现在还没看出来hhhhh

Vue基础组件的更多相关文章

  1. vue基础-组件&插槽

    组件 组件化的意义:封装(复用,把逻辑隐藏起来,提高可维护性),快速开发(搭积木) 约定:我们通常把那些除了HTML标签以外的自定义组件,才称为'组件',结论是,我们说"父组件"& ...

  2. vue基础——组件基础

    一.基本示例 这里有一个Vue组件的示例: // 定义一个名为 button-counter 的新组件 main.js Vue.component('button-counter', { data: ...

  3. vue基础——组件(组件嵌套)

    介绍 vue中页面是由组件组成的,即以.vue结尾的文件. .vue文件由三部分组成,分别是template.script.style. 分别写html.js.css代码. 组件之间可以互相嵌套.所以 ...

  4. vue基础----组件通信(props,$emit,$attrs,$listeners)

    一.父传子,子传孙 1. props 1>在父组件中通过子组件自定义的标签属性来传递数据. 2>在子组件中通过props声明希望用到的数据 <body> <div id= ...

  5. vue基础----组件通信($parent,$children)

    1.按照dom的父子级关系,在子组件中可以通过$parent 直接调用父组件的方法,也可得到父组件的属性. 2.在父组件中通过$childrens可以得到一个子组件数组,能够在父组件中调用子组件的方法 ...

  6. vue 基础: 组件

    2.局部组件: 动态组件:

  7. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十║Vue基础终篇:传值+组件+项目说明

    缘起 新的一天又开始啦,大家也应该看到我的标题了,是滴,Vue基础基本就到这里了,咱们回头看看这一路,如果你都看了,并且都会写了,那么现在你就可以自己写一个Demo了,如果再了解一点路由,ajax请求 ...

  8. Vue – 基础学习(2):组件间 通信及参数传递

    Vue – 基础学习(2):组件间 通信及参数传递

  9. 四、vue基础--自定义组件

    1.语法:Vue.component("组件名字",{data,template}),代码如下: a. data: 必须是一个函数,有一个返回值.和vue里面的使用方法一样 b. ...

随机推荐

  1. 083. Remove Duplicates from Sorted List

    题目链接:https://leetcode.com/problems/rotate-list/description/ Given a sorted linked list, delete all d ...

  2. 走进Selenium新世界

    浏览器 Firefox Setup 35.0.1 安装完成后设置菜单栏 关闭浏览器自动更新 插件配置(必备武器) FireBug Firebug是firefox下的一个扩展,能够调试所有网站语言,如H ...

  3. 微信小程序页面左右滑动事件

    微信小程序提供了页面的上下滚动的事件,在页面的js文件中, page({ onPageScroll(e) { console.log(e.scrollTop) } }) 但是不是滑动事件,滑动事件需要 ...

  4. React Native中ref的用法(通过组件的ref属性,来获取真实的组件)

    ref是什么? ref是组件的特殊属性,组件被渲染后,指向组件的一个引用.可以通过组件的ref属性,来获取真实的组件.因为,组件并不是真正的DOM节点,而是存在于内存中的一种数据结构,称为虚拟的DOM ...

  5. 【HANA系列】【第七篇】SAP HANA XS使用Data Services查询CDS实体【一】

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第七篇]SAP HANA XS ...

  6. 关于SQL关键字"having "

    HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. SQL HAVING 语法 SELECT column_name, aggregate_f ...

  7. Nginx安装出现‘struct crypt_data’没有名为‘current_sal

    centos 安装nginx 时出现src/os/unix/ngx_user.c:26:7: 错误:‘struct crypt_data’没有名为‘current_sal 解决办法: 将系统换成版本低 ...

  8. 【Linux】linux设备驱动归纳总结

    前言: (总结已经基本写完,这段时间我会从新排版和修正.错误总会有的,望能指正!) 前段时间学习了嵌入式驱动,趁着没开始找工作,这段时间我会每天抽出时间来复习. 我的总结是根据学习时的笔记(李杨老师授 ...

  9. mysql 速度优化

    1.添加索引 ALTER TABLE `cw_base_house` ADD INDEX idx_house ( `villageCode`, `buildingNo`, `unitNo`, `hou ...

  10. zabbix监控ssl证书过期时间

    获取证书过期时间脚本: /etc/zabbix/scripts/check-cert-expire.sh: #!/bin/bash host=$ port=$ end_date=`/usr/bin/o ...