Vue--组件

简介: Vue--组件

组件的概念


组件(component)是Vue.js中最强大的功能之一。Vue中的组件化开发就是把网页的重复代码抽取出来,封装成一个个可复用的视图组件,然后将这些组件 拼接到 一块就构成了一个完整的系统,这种方式非常灵活,可以极大的提高我们的开发和维护效率。

例如:项目中可能会有头部,底部,页侧边栏,内容区等组件,每个组件又包含了其他的像导航链接之类的组件。

组件就是对局部视图的封装,每个组件包含了HTML结构,CSS样式,JS行为,

使用组件可以提高开发效率,增强可维护性,更好的解决软件上高耦合,低内聚,无重用的三大代码问题。


组件的基本使用


为了能在模版中使用,这些组件 必须先注册以便Vue能够识别

有两种类型的注册类型,全局注册和局部注册。


全局注册


一般把网页中特殊的 公共部分注册为全局组件:轮播图,分页,通用导航栏等。

全局注册之后,可以在任何新建的Vue实例(new Vue)的模版中使用

格式:

Vue.component('组件名',{
   template: '定义组件模版',
   data: function(){ // data选项在组件中必须是一个函数
   return {}
 } 
   // 其他选项
})

实例

<!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>Document</title>
    <script src="./node_modules/vue/dist/vue.js"></script>
</head>
<body>
    <div id='app'>
        <!-- 引用组件时,组件名必须采用横线分割符 -->
        <component-a></component-a>  <!-- 引用组件 -->
    </div>
    <script>
        // 全局注册组件
        Vue.component('component-a',{
            // template选项指定组件的模版代码
            template: '<div><h1>头部组件---{{ name }}</h1></div>',
            data: function(){  // 在组件中,data选项必须是一个函数
                return {
                    name : '全局组件'
                }
            }
        })
        new Vue({
            el: "#app",
        })
    </script>
</body>
</html>
注意:如果template里的内容很多的时候,我们可以使用反单引号``,数字1旁边的

局部注册(子组件)


一般把一些非通用部分注册为局部组件,一般只适用于当前项目的

格式:

// 1. JS 对象来定义组件:
var ComponentA = { data: function(){}, template: '组件模板A'}
var ComponentA = { data: function(){}, template: '组件模板A'}
//2. 在Vue实例中的 components 选项中引用组件:
new Vue({
  el: '#app',
  data: {},
  components: { // 组件选项
    'component-a': ComponentA // key:组件名,value: 引用的组件对象
    'component-b': ComponentB
}
})

实例:

<!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>Document</title>
    <script src="./node_modules/vue/dist/vue.js"></script>
</head>
<body>
    <div id='app'>
        <!-- 引用组件时,组件名必须采用横线分割符 -->
        <component-b></component-b>  <!-- 引用组件 -->
    </div>
    <script>
        // 定义局部 组件对象 
        const ComponentB = {
            template: '<h1>这是 {{ name }}</h1>',
            data: function () {
                return {
                    name: '局部组件'
                }
            }
        }
        new Vue({
            el: "#app",
            // 组件选项
            components: {
                // key: value   key为组件名,value就是组件对象
                'component-b': ComponentB // 为了简洁把这个定义在外面
            }
        })
    </script>
</body>
</html>


实例


假设我们要使用组件化的思想完成下面的效果

可以使用全局组件的方式,代码如下

<!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>Document</title>
    <script src="./node_modules/vue/dist/vue.js"></script>
</head>
<body>
    <div id="app">
        <app-header></app-header>
        <app-main></app-main>
        <app-footer></app-footer>
    </div>
    <script>
        Vue.component('app-header', {
            template: '<div class="header"><h1>头部组件</h1></div>'
        })
        Vue.component('app-main', {
            template: '<div class="main"><ul><li>用户管理</li><li>帐单管理</li><li>供应商管理</li></ul></div>'
        })
        Vue.component('app-footer', {
            template: '<div class="footer"><h1>底部组件</h1></div>'
        })
        new Vue({
            el: '#app'
        }) 
    </script>
</body>
</html>

但是这样写有一个问题,那就是所有的代码都写在一起,看起来不美观,不易于维护,那我们可以把组件都抽取出来,在引用,目录结构如下

component目录下放的是我们的组件

Footer.js

Header.js

Main.js

我们就可以在多个组件示例中引用了

<!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>Document</title>
</head>
<body>
    <div id="app">
        <app-header></app-header>
        <app-main></app-main>
        <app-footer></app-footer>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script src="component/Header.js"></script>
    <script src="component/Main.js"></script>
    <script src="component/Footer.js"></script>
    <script>
        new Vue({
            el: '#app'
        }) 
    </script>
</body>
</html>

这样我们就完成了组件化,代码易于维护,以后想更改哪个组件,直接找对应的js文件就可以了

注意:template 模板中必须要的根元素,所以要在提取的内容外层加上 <div></div> , 一定要不要少了,不然报以下错误:


相关文章
|
2月前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
161 1
|
17天前
|
移动开发 JavaScript API
Vue Router 核心原理
Vue Router 是 Vue.js 的官方路由管理器,用于实现单页面应用(SPA)的路由功能。其核心原理包括路由配置、监听浏览器事件和组件渲染等。通过定义路径与组件的映射关系,Vue Router 将用户访问的路径与对应的组件关联,支持哈希和历史模式监听 URL 变化,确保页面导航时正确渲染组件。
|
20天前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
77 12
|
16天前
|
JavaScript 前端开发 开发者
Vue中的class和style绑定
在 Vue 中,class 和 style 绑定是基于数据驱动视图的强大功能。通过 class 绑定,可以动态更新元素的 class 属性,支持对象和数组语法,适用于普通元素和组件。style 绑定则允许以对象或数组形式动态设置内联样式,Vue 会根据数据变化自动更新 DOM。
|
17天前
|
JavaScript 前端开发 数据安全/隐私保护
Vue Router 简介
Vue Router 是 Vue.js 官方的路由管理库,用于构建单页面应用(SPA)。它将不同页面映射到对应组件,支持嵌套路由、路由参数和导航守卫等功能,简化复杂前端应用的开发。主要特性包括路由映射、嵌套路由、路由参数、导航守卫和路由懒加载,提升性能和开发效率。安装命令:`npm install vue-router`。
|
1月前
|
JavaScript 安全 API
iframe嵌入页面实现免登录思路(以vue为例)
通过上述步骤,可以在Vue.js项目中通过 `iframe`实现不同应用间的免登录功能。利用Token传递和消息传递机制,可以确保安全、高效地在主应用和子应用间共享登录状态。这种方法在实际项目中具有广泛的应用前景,能够显著提升用户体验。
103 8
|
3月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
190 64
|
1月前
|
存储 设计模式 JavaScript
Vue 组件化开发:构建高质量应用的核心
本文深入探讨了 Vue.js 组件化开发的核心概念与最佳实践。
85 1
|
2月前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
3月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
79 8

热门文章

最新文章