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

一、组件化的优点当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. 七十八:flask.Restful之flask-Restful标准化返回参数以及准备数据

    对于一个视图函数,可以指定好数据结构和字段用于返回,以后使用ORM模型或者自定义的模型的时候,它会自动获取模型中相应的字段,生成json数据,然后再返回给前端,这需要导入flask_restful.m ...

  2. Linux ospf+lvs

    待更新... https://my.oschina.net/lxcong/blog/143904?p=2&temp=1469345328746

  3. 使用 WebStorm alt+f2 快速打开浏览器测试的一点bug

    这个bug是涉及到中英文文件名的问题(不涉及到路径名): Case 1: 中文文件名 当打开alt+f2快捷方式打开含有中文名的html文件时,路径名直接变为localhost,所以找不到要打开的文件 ...

  4. 使用gRPC打造服务间通信基础设施

    一.什么是RPC rpc(远程过程调用)是一个古老而新颖的名词,他几乎与http协议同时或更早诞生,也是互联网数据传输过程中非常重要的传输机制. 利用这种传输机制,不同进程(或服务)间像调用本地进程中 ...

  5. 车载导航应用中基于Sketch UI主题实现

    1.导读 关于应用的主题定制,相信大家或多或少都有接触,基本上,实现思路可以分为两类: 内置主题(应用内自定义style) 外部加载方式(资源apk形式.压缩资源.插件等) 其实,针对不同的主题定制实 ...

  6. CornerNet 算法笔记

    论文名称:CornerNet: Detecting Objects as Paired Keypoints 论文链接:https://arxiv.org/abs/1808.01244 代码链接:htt ...

  7. 【AMAD】schema -- 使用pythonic的方式进行schema验证

    动机 简介 用法 个人评分 动机 验证数据是否符合规范是很有用的,比如: 用于单元测试 用于验证用户提交的数据是否合法 简介 schema1是一个用来验证python数据结构的库. 可以用来验证诸如: ...

  8. 【Linux开发】linux设备驱动归纳总结(八):1.总线、设备和驱动

    linux设备驱动归纳总结(八):1.总线.设备和驱动 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. 同sql server不同database间的数据访问

    虽未经测试,但是应该是登陆名同时具有此2数据库访问权限啦. select * from [basename].dbo.[tablename] done.

  10. 集合运算 - Java实现集合的交、并、差

    1.使用java的Set实现集合的交.并.差 package com.lfy.Set; import java.util.HashSet; import java.util.Set; /** * 集合 ...