写点什么

教女朋友学习 vue 中的组件

作者:Java高工P7
  • 2021 年 11 月 12 日
  • 本文字数:1468 字

    阅读完需:约 5 分钟

// 创建 Vue 实例


var vm = new Vue({


el: '#app',


data: {},


methods: {}


});


</script>


</body>


</html>


测试结果



全局注册往往是不够理想的。比如,如果你使用一个像 webpack 这样的构建系统,全局注册所有的组件意味着即便你已经不再使用一个组件了,它仍然会被包含在你最终的构建结果中。这造成了用户下载的 JavaScript 的无谓的增加。



有时候由于不需要全局注册每个组件。可以让组件只能用在其它组件内,用实例选项 components 注册。这就有了局部注册组件!

2. 局部注册

局部组件只能在当前注册它的 vue 实例中使用


代码示例


<body>


<div id="app">


<my-component></my-component>


</div>


<template id="templ">


<h1>Hello! 我是局部注册组件</h1>


</template>


<script>


// 创建 Vue 实例


var vm = new Vue({


el: '#app',


data: {},


components: { // 定义实例内部的私有属性


myComponent: {


template: '#templ'


}


}


})


</script>


</body>


测试结果


3. 组件使用注意事项

① 组件名称如果是使用驼峰法命名,使用组件的时候要将大写字母改为小写,并且在前面加上 - ;



② 组件中的 tamplate 属性必须有一个唯一的根元素,否则会报错;



这个错误的意思是: 组件模板应该只包含一个根元素。应该按如下的方法来写:


三、组件的复用

有时候由于实际需要,有时候需要将组件进行任意次数的复用


代码示例


<body>


<div id="app">


<button-counter></button-counter>


<button-counter></button-counter>


<button-counter></button-counter>


</div>


<template id="templ">


<button class="btn" @click="toClick">点击了{{count}}次</button>


</template>


<script>


var dataObj = {


count: 0


}


Vue.component('button-counter', {


template: '#templ',


data: function () {


// data 选项是一个对象


return dataObj


},


methods: {


toClick: function () {


this.count += 1;


}


}


})


var vm = new Vue({


el: '#app',


data: {}


});


</script>


</body>


测试结果


1. 遇到的问题

从测试结果可以看出,当点击一个按钮的时候,其它实例的值也会跟着改变。


原因是:data 选项是一个对象,会影响到其它实例。


2. 解决问题

代码示例


<!DOCTYPE html>


<html lang="en">


<head>


<meta charset="UTF-8">


<meta name="viewport" content="width=device-width, initial-scale=1.0">


<meta http-equiv="X-UA-Compatible" content="ie=edge">


<title>组件复用</title>


<script src="js/vue.js"></script>


<style>


.btn {


text-align: center;


color:white;


background-color: green;


font-size: 15px;


margin-top: 10px;


}


</style>


</head>


<body>


<div id="app">


<button-count


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


er></button-counter>


<button-counter></button-counter>


<button-counter></button-counter>


</div>


<template id="templ">


<button class="btn" @click="toClick">点击了{{count}}次</button>


</template>


<script>


Vue.component('button-counter', {


template: '#templ',


data: function () {


// data 选项是一个函数,组件不相互影响


return {


count: 0


}


},


methods: {


toClick: function () {


this.count += 1;


}


}


})


var vm = new Vue({


el: '#app',


data: {}


});


</script>


</body>


</html>


测试结果



上面例子中,可以看到 button-counter 组件中的 data 不是一个对象,而是一个函数。注意当点击按钮时,每个组件都会各自独立维护它的 count。因为每用一次组件,就会有一个它的新实例被创建。


这样做的好处:就是每个实例可以维护一份被返回对象的独立的拷贝,如果 data 是一个对象则会影响到其它实例。



用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
教女朋友学习 vue中的组件