搜索
首页web前端Vue.jsVue.js 学习之四:Vue 组件基础

Vue.js教程栏目今天为大家介绍Vue的组件基础知识。

Vue.js 学习之四:Vue 组件基础

到目前为止,这个系列的笔记所展示的都是一些极为简单的单页面 Web 应用程序,并且页面上通常只有几个简单的交互元素。但在实际生产环境中,Web 应用程序的用户界面往往是由多个复杂的页面共同组成的。这时候,我们就需要开始注意代码的可复用性了,针对这个问题,Vue.js 框架提出的解决方案就是先将用户界面上的元素按照不同的功能划分成一个个独立的组件,例如导航栏、公告栏、数据表格、用户注册表单、用户登录界面等。这样一来,我们在之后的工作中就可以像玩乐高玩具一样,根据需要将这些组件组合成各种具体的应用程序了。总而言之,组件系统是我们在学习 Vue.js 框架中必须要掌握的一个重要概念。下面,这篇笔记将通过编写一系列实验示例来体验一下在 Vue.js 框架中构建和使用组件的基本方法。

在所有实验开始之前,我需要先在code目录中创建一个名为00_test的目录,以便用于存放接下来的一系列实验项目,由于这些项目只能用于体验 Vue 组件的构建与使用方法,并没有实际的应用功能,所以我给了它00这个编号。那么,下面就来开始第一个实验吧!为此,我需要继续在code/00_test目录中再创建一个名为component_1的实验目录,并在该目录下执行npm install vue命令来安装 Vue.js 框架。最后,我只需在code/00_test/component_1目录下创建一个名为index.htm的文件,并输入如下代码:

<!DOCTYPE html>
<html lang="zh-cn">
<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>学习 vue 组件实验(1):组件注册</title>
`</head>
<body>
    <p id="app">
        <say-hello :who="who"></say-hello>
        <welcome-you :who="who"></welcome-you>
    </p>
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script>
        // 全局组件注册
        Vue.component('say-hello', {
            template: `<h1>你好, {{ you }}!</h1>`,
            props: ['who'],
            data: function() {
                return {
                    you: this.who
                };
            }
        });

        const app = new Vue({
            el: '#app',
            // 局部组件注册
            components: {
                'welcome-you': {
                    template: `<h2>欢迎你, {{ you }}!</h2>`,
                    props: ['who'],
                    data: function() {
                        return {
                            you: this.who
                        };
                    }
                }
            },
            data: {
                who: 'vue'
            }
        });
    </script>
</body>
</html>

在上述实验中,我用两种不同的方式分别创建并注册了say-hellowelcome-you两个组件。接下来就借由这两个组件来介绍一下这两种组件的使用。首先是say-hello组件,该组件是通过调用Vue.component()方法来创建并注册到应用程序中的,使用该方法创建的组件通常被称之为"全局组件",我们在调用它的时候需要提供两个参数:

  • 第一个参数应该是一个字符串对象,用于指定组件的名称,该名称也是我们要在 HTML 文档中使用的自定义标签元素,而由于 HTML 代码是大小写不敏感的,所以我个人会建议大家在给组件起名字的时候应该尽量一律使用小写字母,单词之间可以使用-这样分隔符进行区隔。

  • 第二个参数应该是一个 JavaScript 对象,用于设置组件的各项具体参数。这里定义了以下三项最基本参数:

    • template:该参数是个字符串对象,用于指定该组件的 HTML 模版代码,需要注意的是,这段代码说对应的 DOM 对象必须有且只能有一个根节点。而这个对象在最终的 HTML 文档中将会由该组件所对应自定义标签所代表,在这里就是<say-hello>
    • props:该参数是一个字符串数组,该数组中的每个元素都是该组件所对应的自定义标签的一个属性,该组件的用户可以通过v-bind指令将该属性绑定到某一数据上,以便将数据传到组件内部。例如在这里,我在<say-hello>标签中就用v-bind指令将该标签的who属性绑定到了 Vue 实例对象的who数据上,并将其传进say-hello组件中。
    • data:该参数是一个函数,用于设置组件自身的数据,例如这里的you,我将从调用者那里获取的who数据赋值给了它。对于后者,我们可以用this引用来获取。

    当然了,除了上面三个基本参数之外,我们还可以为组件设置更多参数,例如自定义事件及其处理函数等,这些我将会在后续的程序编写体验中展示。

下面,我们再来看welcome-you组件的构建。如你所见,该组件是在 vue 实例的components成员中构建并注册到应用程序中的,使用该方法创建的组件通常被称之为"局部组件"(它与全局组件的区别是,全局组件会在程序运行时全部加载,而局部组件只会在被实际用到时加载) 。该components成员的值也是一个 JSON 格式的数据对象,该数据对象中的每一个成员都是一个局部组件,这些组件采用键/值对的方式来定义,键对应的是组件的名称,值对应的是组件参数的设置。当然了,由于局部组件的命名规则与具体参数的设置方法都与全局对象一致,这里就不再重复说明了。

需要注意的是,第一个实验项目的编写方式将 HTML 代码、Vue 实例的构建代码以及组件的构建代码糅合在了一起,这对于提高代码的可复用性这个目的来说,显然是不行的。要想解决这个问题,我们可以利用 ES6 规范新增的模块规则将这三部分代码隔离开来。为了体验这种用法,我继续开始了第二个实验。具体做法就是在code/00_test目录中再创建一个名为component_2的实验目录,并在该目录下执行npm install vue命令来安装 Vue.js 框架。最后,我只需在code/00_test/component_2目录下创建一个名为index.htm的文件,并输入如下代码:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <script src="./node_modules/vue/dist/vue.js"></script>
    <script type="module" src="./main.js"></script>
    <title>学习 vue 组件实验(2):以 ES6 模块的方式注册组件</title>
</head>
<body>
    <p id="app">
        <say-hello :who="who"></say-hello>
    </p>
</body>
</html>

在上述 HTML 代码中,我们在照常引入 vue.js 框架之后,使用模块的方式引入了main.js脚本文件,最好在<p id="app">标签中使用了后面将要定义的组件所对应的自定义标签。接下来,我只需要在相同的目录下创建一个名为main.js的 JavaScript 脚本文件,并在其中输入如下代码:

// import Vue from './node_modules/vue/dist/vue.js';
import sayhello from './sayhello.js';

const app = new Vue({
    el: '#app',
    components: {
        'say-hello': sayhello
    },
    data: {
        who:'vue'
    }
});

在上述 JavaScript 代码中,我首先使用了 ES6 新增的import-from语句导入了后续要在sayhello.js文件中构建的组件,然后在构建 Vue 实例时将其注册成了局部组件。最后,我只需在同一目录下再创建这个sayhello.js脚本文件,并在其中输入如下代码:

const tpl = `
    <p>
        <h1>你好, {{ you }}!</h1>
        <input type="text" v-model="you" />
    </p>
`;

const sayhello = {
    template: tpl,
    props : ['who'],
    data : function() {
        return {
            you: this.who
        }
    }
};

export default sayhello;

在这部分代码中,我先定义了一个局部组件,然后再使用 ES6 新增的export default语句将其导出为模块。当然,考虑到各种 Web 浏览器对 ES6 规范的实际支持情况,以及 Vue.js 框架本身使用的是 CommonJS 模块规范,所以上述实验依然可能不是编写 Vue.js 项目的最佳方式,其中可能还需要配置 babel 和 webpack 这样的转译和构建工具来辅助。在下一篇笔记中,我就来记录如何使用这些工具来构建具体的 vue 应用程序。

相关学习推荐:js视频教程

以上是Vue.js 学习之四:Vue 组件基础的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:cnblogs。如有侵权,请联系admin@php.cn删除
vue.js:定义其在网络开发中的作用vue.js:定义其在网络开发中的作用Apr 18, 2025 am 12:07 AM

Vue.js在Web开发中的角色是作为一个渐进式JavaScript框架,简化开发过程并提高效率。1)它通过响应式数据绑定和组件化开发,使开发者能专注于业务逻辑。2)Vue.js的工作原理依赖于响应式系统和虚拟DOM,优化性能。3)实际项目中,使用Vuex管理全局状态和优化数据响应性是常见实践。

了解vue.js:主要是前端框架了解vue.js:主要是前端框架Apr 17, 2025 am 12:20 AM

Vue.js是由尤雨溪在2014年发布的渐进式JavaScript框架,用于构建用户界面。它的核心优势包括:1.响应式数据绑定,数据变化自动更新视图;2.组件化开发,UI可拆分为独立、可复用的组件。

Netflix的前端:React(或VUE)的示例和应用Netflix的前端:React(或VUE)的示例和应用Apr 16, 2025 am 12:08 AM

Netflix使用React作为其前端框架。1)React的组件化开发模式和强大生态系统是Netflix选择它的主要原因。2)通过组件化,Netflix将复杂界面拆分成可管理的小块,如视频播放器、推荐列表和用户评论。3)React的虚拟DOM和组件生命周期优化了渲染效率和用户交互管理。

前端景观:Netflix如何处理其选择前端景观:Netflix如何处理其选择Apr 15, 2025 am 12:13 AM

Netflix在前端技术上的选择主要集中在性能优化、可扩展性和用户体验三个方面。1.性能优化:Netflix选择React作为主要框架,并开发了SpeedCurve和Boomerang等工具来监控和优化用户体验。2.可扩展性:他们采用微前端架构,将应用拆分为独立模块,提高开发效率和系统扩展性。3.用户体验:Netflix使用Material-UI组件库,通过A/B测试和用户反馈不断优化界面,确保一致性和美观性。

React与Vue:Netflix使用哪个框架?React与Vue:Netflix使用哪个框架?Apr 14, 2025 am 12:19 AM

NetflixusesAcustomFrameworkcalled“ Gibbon” BuiltonReact,notReactorVueDirectly.1)TeamExperience:selectBasedAsedonFamiliarity.2)ProjectComplexity:vueforsimplerprojects,vueforsimplerprojects,reactforforforecomplexones.3)cocatizationNeedsneeds:reactofficatizationneedneeds:reactofferizationneedneedneedneeds:reactoffersizatization needeffersefersmoreflexiblesimore.4)ecosyaka

框架的选择:是什么推动了Netflix的决定?框架的选择:是什么推动了Netflix的决定?Apr 13, 2025 am 12:05 AM

Netflix在框架选择上主要考虑性能、可扩展性、开发效率、生态系统、技术债务和维护成本。1.性能与可扩展性:选择Java和SpringBoot以高效处理海量数据和高并发请求。2.开发效率与生态系统:使用React提升前端开发效率,利用其丰富的生态系统。3.技术债务与维护成本:选择Node.js构建微服务,降低维护成本和技术债务。

反应,vue和Netflix前端的未来反应,vue和Netflix前端的未来Apr 12, 2025 am 12:12 AM

Netflix主要使用React作为前端框架,辅以Vue用于特定功能。1)React的组件化和虚拟DOM提升了Netflix应用的性能和开发效率。2)Vue在Netflix的内部工具和小型项目中应用,其灵活性和易用性是关键。

前端中的vue.js:现实世界的应用程序和示例前端中的vue.js:现实世界的应用程序和示例Apr 11, 2025 am 12:12 AM

Vue.js是一种渐进式JavaScript框架,适用于构建复杂的用户界面。1)其核心概念包括响应式数据、组件化和虚拟DOM。2)实际应用中,可以通过构建Todo应用和集成VueRouter来展示其功能。3)调试时,建议使用VueDevtools和console.log。4)性能优化可通过v-if/v-show、列表渲染优化和异步加载组件等实现。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中