小白初学Vue之 组件与实例的关系 初试篇

内容:组件和实例

一、组件和实例的关系

先看下之前的代码,来看下整体的架构

 1 <!DOCTYPE html>
 2 <html>
 3
 4  <head>
 5   <meta charset="UTF-8">
 6   <title>拆分组件</title>
 7   <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
 8  </head>
 9  <style>
10   button {
11    background: blue;
12    height: 32px;
13    width: 120px;
14    border: 1px solid blue;
15    color: #FFFFFF;
16    margin-top: 20px;
17    font-size: 14px;
18   }
19  </style>
20
21  <body>
22    <div id="root">
23      <input type="text" name="" id="" v-model="msg" />
24      <button @click="add">添加</button>
25      <!--list显示-->
26      <ul>
27         <li-cell v-for="(item ,index) of list" :key="index" :content="item"></li-cell>
28      </ul>
29
30     </div>
31     <script type="text/javascript">
32      // 全局组件
33      Vue.component(‘li-cell‘, {
34          props: [‘content‘], // 添加content属性后
35          template: "<li>{{content}}</li>" // 添加content属性后
36      });
37      new Vue({
38         el: "#root",
39         data: {
40             msg: "",
41             list: [],
42         },
43        methods: {
44            add: function() {
45            this.list.push(this.msg);
46            this.msg = "";
47        }
48     }
49    });
50   </script>
51  </body>
52
53 </html>

先看下整体结构 :

我们先看下最外层的这个Vue实例。它的挂载点是在id为root的div ,而这个div内的内容就是这个实例的模板我们可以这样认为。

再看下我们创建的组件,你可以尝试把实例中的相关属性都在添加下再你创建的组件中测试下,你会发现“组件其实就是实例”。即你可以在你创建的组件中添加data、methods..等属性。


二、父组件与子组件之前的交互

示例:删除功能

 1 <!DOCTYPE html>
 2 <html>
 3
 4  <head>
 5   <meta charset="UTF-8">
 6   <title>通过简单的删除功能来理解父组件与子组件之间的数据传递</title>
 7   <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
 8  </head>
 9  <style type="text/css">
10   button {
11    font-size: 14px;
12    background: skyblue;
13    border: 1px solid skyblue;
14    width: 100px;
15    height: 30px;
16    border-radius: 4px;
17   }
18  </style>
19
20  <body>
21   <!--实现效果点击li删除-->
22   <div id="root">
23    <input type="text" v-model="msg" />
24    <button @click="add">添加</button>
25    <ul>
26     <itme-cell v-for="(item,index) of list" :key="index" :index="index"  :content="item" @delete="handle"></itme-cell>
27    </ul>
28   </div>
29   <script>
30   // 一般的删除思路:点击li,找到当前li的父级ul,进行删除;
31
32   // 该组件是子组件
33   Vue.component(‘itme-cell‘,{
34     props:[‘content‘,‘index‘] ,// 接受父组件传递过来的索引index
35    template:‘<li @click="deleteLi">{{content}}</li>‘,// 我们先给li绑定删除事件
36    methods:{// 当li被点击时,会触发deleteLi
37     deleteLi:function(){
38 //      alert(this.index);
39       this.$emit(‘delete‘,this.index);// 此处表示向外触发删除事件,即父组件中的delete事件,并同时把索引传递给父组件。从而让父组件去执行handle 的方法;
40     }
41    }
42   });
43
44   // 最外层的vue实例是父组件
45    new Vue({
46     el: ‘#root‘,
47     data: {
48      msg: "",
49      list: []
50     },
51     methods:{
52      add:function(){// 当添加按钮别点击时会触发该add方法
53       this.list.push(this.msg); // 因为input值与实例中data的msg变量进行了双向绑定,所以此处的意思就是:只要点击添加按钮,就会获取input中的值,并把这个值添加到list数组中。然后现在是list数据已经存在了,就在模板中调用v-for对数据进行循环加载即可
54       this.msg="";// 每次添加完成都会清空下input中的值
55      },
56      handle:function(){
57        // 把数据移除注意此处一定要是this.index,否则会报错 ..index not defined..
58       this.list.splice(this.index,1);// splice(索引,要移除的个数);
59       //我自己写的时候其实是有疑问的,一般的开发我们删除数据之后还要把当前的dom也在页面中移除掉。但是为什么此处不用呢?我现在只知道这个方法是vue更改后的,如果调用删除数组元素的方法vue就会自动更新视图,这块我还是不清楚,有知道望解惑下!
60      }
61     }
62    });
63   </script>
64  </body>
65
66 </html>

通过上述代码可以得出:

1.最外层的Vue实例是父组件,Vue.component是子组件;

2.父组件---->子组件:

用上述代码来举例,父组件中的模板把content与index属性传递给子组件,子组件用props来接收2个属性;

3.点击子组件中的模板触发事件时,使用 this.$emit(‘delete‘,this.index);通知父组件触发delete事件并同时把index传递给父组件。

4.代码中“this.list.splice(this.index,1)”这个splice()是vue改写过的方法,调用后vue视图会自动更新。



感谢浏览至此,目前我也只是明白的它的意思,但是具体的还要深入了解,目前只能是了解阶段,皮毛都不算。有不对的地方,望指出,共提升,多谢~

原文地址:https://www.cnblogs.com/xiaowanzijun/p/9262489.html

时间: 2024-10-16 05:33:00

小白初学Vue之 组件与实例的关系 初试篇的相关文章

vue之组件在脚手架构造篇

最近开始使用了vue构建一个新项目,对于vue的核心优势--组件的构造,很多人刚开始的时候,都是懵逼的,在网上以及官网,他们都是已经构造好的组件,并没有从头到尾的详细介绍一个组件是如何封装的,这给小白们造成很大的不方便的地方,本文就是将一个vue的组件从头到尾给构建出来的教程 vue组件的优势 vue组件的构建 vue组件的注意事项 一.vue组件的优势 1.我们在写一个页面的时候,时长会碰到一种样式,或者一块菜单栏之类的,它们在很多的页面都是一模一样的,如果我们每一个页面都写一遍的话,会造成巨

vue.js 组件之间如何实现数据传递?

组件是 vue.js  最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用.如何传递数据也成了组件的重要知识点之一.本文和大家分享的就是vue.js  组件之间传递数据相关内容,一起来看看吧,希望对大家 学习vue.js有所帮助. 组件 组件与组件之间,还存在着不同的关系.父子关系与兄弟关系(不是父子的都暂称为兄弟吧). 父子组件 父子关系即是组件 A  在它的模板中使用了组件  B ,那么组件  A  就是父组件,组件  B  就是子组件. //  注册

Vue.2.0.5-Vue 实例

构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的: var vm = new Vue({ // 选项 }) 虽然没有完全遵循 MVVM 模式, Vue 的设计无疑受到了它的启发.因此在文档中经常会使用 vm 这个变量名表示 Vue 实例. 在实例化 Vue 时,需要传入一个选项对象,它可以包含数据.模板.挂载元素.方法.生命周期钩子等选项.全部的选项可以在 API 文档中查看. 可以扩展 Vue 构造器,从而用预定义选项创建可复用的组件构造器: var

Vue动态组件

前面的话 让多个组件使用同一个挂载点,并动态切换,这就是动态组件.本文将详细介绍Vue动态组件 概述 通过使用保留的 <component> 元素,动态地绑定到它的 is 特性,可以实现动态组件 <div id="example"> <button @click="change">切换页面</button> <component :is="currentView"></compon

vue.js组件之间通讯--父组件调用子组件的一些方法,子组件暴露一些方法,让父组件调用

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><div id="app"></div></body><script src="node_modules/vue/

Vue.js组件之间的通信

导语:组件之间的关系不外乎两种, 父子组件和非父子组件,本文将对两类组件之间的通信方式进行详细阐述. 父子组件间的通信 通信方式1(单向绑定): Props down, Events up (建议使用) Props down, Events up 是指 使用props向子组件传递数据,父组件属性发生变化时,子组件可实时更新视图:子组件发生变化,可以使用$emit发送事件消息,以此向父组件传递变化消息. props 是单向的,当父组件的属性变化时,将传递给子组件,但子组件中的props属性变化不会

七周七种前端框架四:Vue.js 组件和组件通信

基本是按照官网的 Guide 全部梳理了一遍:http://vuejs.org/guide/index.html 这里我们以一个 Todo List 应用为例来把相关的只是都串起来,这篇里面的全部代码都在github上 https://github.com/lihongxun945/vue-todolist Vue 实例 一个 Vue 应用是由一个 root vue instance 引导启动的,而 Vue instance 是这么创建的: var vm = new Vue({ // optio

Vue父子组件和非父子组件传值问题

父组件跟子组件之间的传值(具体参考lonzhubb商城) 1.父组件传值给子组件形式,ifshop是要传的对象,右边ifshop代表要传的这个对象的数据 <v-select  :ifshop="ifshop"  :clickType="clickType" @close="close" @addShop="sureAddShop"></v-select> 2.子组件接收父组件的数据用props prop

Vue学习1:实例及生命周期

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Vue1</title> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <!--