【Vue组件系统】 -- 2019-08-08 18:01:48

目录

  • 全局组件
  • 局部组件
    • 注册
    • 子组件的用法
    • 父子组件的通讯
    • 子父组件的通讯
    • 非父子组件的通讯
  • 混入
  • 插槽
  • 具名插槽
  • 使用组件的注意事项

原文: http://106.13.73.98/__/52/

vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能。本文将详细介绍使用vue.js进行页面布局的强大工具——vue.js组件系统。

每一个新技术的诞生,都是为了解决特定的问题。
组件的出现就是为了解决页面布局等等一系列的问题。
Vue中的组件分为两种:==全局组件与局部组件.==
@

全局组件



注册

方式一:

<body>
<div id="app"></div>

</body>

方式二:

<body>
<div id="app">
    <!--调用自定义的标签名 可重复调用 -->
    <global-component></global-component>
    <global-component></global-component>
</div>

</body>


局部组件

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

全局组件适中是存在的,除非程序结束,如果组件越来越大,那么程序所占用的空间和消耗的性能就会更大。

所以我们需要使用局部组件。不用的时候,被垃圾回收。
***

注册

方式一:

<body>
<div id="app">
    <!--第三步:在根元素中使用-->
    <!--会将当前div渲染进DOM(也就是这里id为app的div)-->
    <my-header></my-header>
</div>

</body>

方式二:

<body>
<div id="app"></div>

</body>

对于components 对象中的每个属性来说,其属性名就是自定义元素的名字,其属性值就是这个组件的选项对象。
***

子组件的用法

<body>
<div id="app"></div>

</body>

父子组件的通讯

<body>
<div id="app"></div>

</body>

子父组件的通讯

下面示例的基本思路:
·
子组件与父组件各定义一个事件,且子组件事件函数中可触发父组件的事件.

  1. 先触发子组件中的事件——执行子组件事件函数;
  2. 在子组件的事件函数中触发父组件的事件,同时向父组件传入数据;
  3. 父组件事件被触发,同时接收传入的数据,执行事件,ok.
<body>
<div id="app"></div>

</body>

非父子组件的通讯

<body>
<div id="app">
    <zyk01></zyk01>
    <zyk02></zyk02>
</div>

</body>


混入

==混入可提高代码的重用性.==

<body>
<div id="app">
    <test01></test01>
    <test02></test02>
</div>

</body>


插槽

有时候我们需要向组件传递一些数据,这时候可以使用插槽.

<!DOCTYPE html>
<html lang="zh-CN">
<head>

    <title>test</title>
    <style>
        .box {
            width: 50px;
            height: 50px;
            background-color: green;
            float: left;
            margin-left: 5px;
        }
    </style>
</head>
<body>
<div id="app">
    <global-component>test01</global-component>
    <global-component>test02</global-component>
    <global-component>test03</global-component>
    <global-component>test04</global-component>
    <global-component>test05</global-component>
</div>

</body>
</html>


具名插槽

该操作使用了组件的复用,通过使用具名插槽,我们可以在同一个组件内写入不同的页面,并且给不同的内容命名.

<!DOCTYPE html>
<html lang="zh-CN">
<head>

    <title>test</title>
    <style>
        .box {
            width: 50px;
            height: 65px;
            background-color: green;
            float: left;
            margin-left: 5px;
        }
    </style>
</head>
<body>
<div id="app">
    <global-component>
        <!--定义具名插槽-->
        <div slot="test01">test01</div>
        <div slot="test02">test02</div>
        <div slot="test03">test03</div>
        <div>test04</div>
        <div>test05</div>
    </global-component>
</div>

</body>
</html>


使用组件的注意事项

单个根元素
当构建一个内容页面的组件时,我们的组件可能包含多个HTML标签。

<h1>Hello World</h1>
<h2>Hello Vue</h2>

然而如果你在模板中尝试这样写,Vue 会显示一个错误,并解释道 every component must have a single root element (每个组件必须只有一个根元素)。你可以将模板的内容包裹在一个父元素内,来修复这个问题,例如:

<div>
  <h1>Hello World</h1>
  <h2>Hello Vue</h2>
</div>

解析特殊的HTML元素

有些HTML元素,必须< ul >、< ol >、< table >和< select >,对于哪些元素可以出现在其内部是有严格限制的,而有些元素,例如< li >、< tr >和< option >,只能出现在其它某些特定元素的内部。

这会导致我们使用这些有约束条件的元素时遇到一些问题。例如:

<table>
  <blog-post-row></blog-post-row>
</table>

这个自定义组件 < blog-post-row > 会被作为无效的内容提升到外部,并导致最终渲染结果出错。幸好这个特殊的 is 特性给了我们一个变通的办法:

<table>
  <tr is="blog-post-row"></tr>
</table>

需要注意的是,如果我们从以下来源使用模板的话,这条限制是不存在的:

字符串 (例如:template: '...')
单文件组件 (.vue)

    <!-- 引入样式 -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <!-- 引入组件库 -->

    <style>
        body {
            margin: 0;
            padding: 0;
        }

        .header {
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
        }

        .el-menu {
            display: flex;
            align-items: center;
            justify-content: center;
        }

        .footer {
            position: fixed;
            bottom: 0;
            left: 0;
            width: 100%;
        }

        .header img {
            position: absolute;
            left: 80px;
            top: -4px;
            width: 118px;
            height: 70px;
            z-index: 999;
        }

    </style>
</head>
<body>

<div id="app">

</div>

<template id="header">
    <div class="header">
        <img src="https://www.luffycity.com/static/img/head-logo.a7cedf3.svg"/>
        <el-menu :default-active="activeIndex" class="el-menu-demo" mode="horizontal">
            <el-menu-item index="1">标题01</el-menu-item>
            <el-menu-item index="2">标题02</el-menu-item>
            <el-menu-item index="3">标题03</el-menu-item>
            <el-menu-item index="4">标题04</el-menu-item>
            <el-menu-item index="5">标题05</el-menu-item>
            <el-menu-item index="6">标题06</el-menu-item>
            <el-menu-item index="7">标题07</el-menu-item>
            <el-menu-item index="8">标题08</el-menu-item>
        </el-menu>
    </div>

</template>

<template id="footer">
    <div class="footer">

        <el-menu class="el-menu-demo" mode="horizontal" background-color="black">
            <el-menu-item index="1">关于我们</el-menu-item>
            <el-menu-item index="2">联系我们</el-menu-item>
            <el-menu-item index="3">商业合作</el-menu-item>
            <el-menu-item index="4">帮助中心</el-menu-item>
            <el-menu-item index="5">意见反馈</el-menu-item>
            <el-menu-item index="6">新手指南</el-menu-item>
        </el-menu>

    </div>

</template>

</body>
</html>

原文: http://106.13.73.98/__/52/

原文地址:https://www.cnblogs.com/gqy02/p/11322799.html

时间: 2024-11-09 06:01:45

【Vue组件系统】 -- 2019-08-08 18:01:48的相关文章

【Vue路由系统详述】 -- 2019-08-08 18:01:24

目录 路由命名 路由参数 路由参数的实现原理 子路由 子路由之append 动态绑定属性 子路由之append升级版 子路由之非append 路由重定向 手动路由 路由钩子 在路径中去掉"#"号 原文: http://106.13.73.98/__/55/ 一切分离都是为了更好的结合,本文详细介绍了前后端架构分离之后,前端如何实现路由的控制,即Vue路由系统--VueRouter. VueRouter下载地址(默认最新版本):https://unpkg.com/[email prote

Vue组件系统

目录: Vue组件系统之全局组件的注册 Vue组件系统之组件的复用 Vue组价系统之局部组件的注册 Vue组件系统之父子组件的通信 Vue组件系统之子父组件的通信 Vue组件系统之混入(mixin) Vue组件系统之插槽<slot></slot> Vue组件系统之具名插槽 Vue组件系统之全局组件的注册 <div id='app'> <global-component></global-component></div> <scr

Vue 组件系统

Vue 组件系统 vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文详细介绍使用vue.js进行页面布局的强大工具,vue.js组件系统. 每一个新技术的诞生,都是为了解决特定的问题.组件的出现就是为了解决页面布局等等一系列问题.vue中的组件分为两种,全局组件和局部组件. 一.全局组件的注册 通过Vue.component()创建一个全局组件之后,我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用. <!D

【Vue组件系统】 -- 2019-08-08 18:01:47

目录 全局组件 局部组件 注册 子组件的用法 父子组件的通讯 子父组件的通讯 非父子组件的通讯 混入 插槽 具名插槽 使用组件的注意事项 原文: http://106.13.73.98/__/52/ vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文将详细介绍使用vue.js进行页面布局的强大工具--vue.js组件系统. 每一个新技术的诞生,都是为了解决特定的问题. 组件的出现就是为了解决页面布局等等一系列的问题. Vue中的组件分为两种:==全局

【Vue组件系统】 -- 2019-08-08 20:40:06

目录 全局组件 局部组件 注册 子组件的用法 父子组件的通讯 子父组件的通讯 非父子组件的通讯 混入 插槽 具名插槽 使用组件的注意事项 原文: http://106.13.73.98/__/52/ vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文将详细介绍使用vue.js进行页面布局的强大工具--vue.js组件系统. 每一个新技术的诞生,都是为了解决特定的问题. 组件的出现就是为了解决页面布局等等一系列的问题. Vue中的组件分为两种:==全局

【Vue组件系统】 &#394369;

目录 全局组件 局部组件 注册 子组件的用法 父子组件的通讯 子父组件的通讯 非父子组件的通讯 混入 插槽 具名插槽 使用组件的注意事项 使用组件实现导航栏 原文: http://blog.gqylpy.com/gqy/277 "vue.js既然是框架,那就不能只是简单的完成数据模板引擎的任务,它还提供了页面布局的功能.本文将详细介绍使用vue.js进行页面布局的强大工具--vue.js组件系统. 每一个新技术的诞生,都是为了解决特定的问题. 组件的出现就是为了解决页面布局等等一系列的问题. V

【Vue】详解Vue组件系统

Vue渲染的两大基础方式 new 一个Vue的实例 这个我们一般会使用在挂载根节点这一初始化操作上: new Vue({ el: '#app' }) 注册组件并使用 通过Vue.component()去注册一个组件,你就可以全局地使用它了,具体体现在每个被new的 Vue 实例/注册组件, 的template选项属性或者对应的DOM模板中,去直接使用 注册组件 全局注册 例如,放在通过new创建的Vue实例当中: Vue.component('my-component', { template:

【Vue实例生命周期】 -- 2019-08-08 18:01:29

目录 实例创建之前执行--beforeCreate 实例创建之后执行--created 挂载之前执行--beforeMount 挂载之后执行--mounted 数据更新之前执行--beforeUpdate 数据更新之后执行--updated 实例销毁之前执行--beforeDestroy 实例销毁之后执行--destroyed keep-alive组件激活时执行--activated keep-alive组件停用时执行--deactivated 原文: http://106.13.73.98/_

UCanCode发布升级E-Form++可视化源码组件库2015全新版 (V23.01)!

2015年4月. 成都 UCanCode发布升级E-Form++可视化源码组件库2015全新版 (V23.01)! --- 全面性能提升,UCanCode有史以来最强大的版本发布! E-Form++可视化源码组件库企业版本2015最新版发布!(超过50万行VC++源代码,历时14年开发,价值数百万,100% VC++ Source Code提供)!("The only Flow/Diagramming Kits that provides full source code of componen