当前位置: 首页 > news >正文

is属性用法 vue_vue组件讲解(is属性的用法)

什么是组件?

在说之前我们先搞清楚什么是组件?这样对我们下边的学习是很有帮助的。

组件(Component)是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可以重复使用的代码。在较高层次上,组件就是自定义元素,Vue.js的编辑器为它添加特殊功能。在有些情况下,组件也可以是原生元素的形式,以is特性进行扩展。

怎么使用组件?

说道这里,组件是什么,我们都有了清楚的了解,但是怎么使用呢?

首先,我们要进行注册,才能进行使用

注册

之前我们也说过,可以通过new来创建一个VUE实例

new Vue ({

'el' : '#element',

//选项

})

1

2

3

4

这样,一个vue实例我们就创建成功了,这时候就要注册一个组件,我们可以通过Vue.component(tagName,options)。由于作用域的不同,组件也是分为全局组件和局部组件的,我们先来说全局组件。

Vue.component('my-component',{

//选项

})

1

2

3

一个全局组件就这样组册成功了,此后便可以在父实例的模块中以自定义元素的形式进行使用。一定切记,要确保在初始化根实例之前注册了组件:

1

2

3

//注册组件

Vue.component('my-component',{

'template' : '

一个全局组件
'

})

//创建根实例 new Vue({ 'el' : '#app', })

1

2

3

4

5

6

7

8

以上渲染出来就是:

一个全局组件

1

2

3

局部注册

在开发中,我们不必在全局注册每个组件。通过使用组件实例选项注册,可以使组件仅在另一个实例/组件的作用域可用,代码如下:

var Child = {

'template' : '

一个组件
'

}

new Vue({

'el' : '#app',

//... 'component' : { 'my-component' : Child //此时该模板只能在父实例中使用 } })

1

2

3

4

5

6

7

8

9

10

11

12

这种封装方式也可适用于其他可注册的Vue功能。如指令

DOM模板解析说明

当使用DOM作为模板时(例如,将el选项挂载到一个已知的元素上),你会受到HTML的一些限制,因为Vue只有在浏览器解析和标准化HTML后才能获取模板内容。尤其像这些元素

  • ,
  1. ,

在自定义组件中使用这些受限制的元素时会导致一些问题,例如:

...

1

2

3

自定义组件被认为是无效的内容,因此在渲染的时候会出现导致错误。变通的方案是使用特殊的is属性:

1

2

3

应当注意,如果我们使用下面来源之一的字符串模板,这些限制将不适用:

JavaScript内联模板字符串

.Vue组件

因此,有必要的话请使用字符串模板

data必须是函数

通过Vue构造器传入的各种选项大多数都可以在组件里使用。data是个例外,它必须是函数。实际上,如果我们这样做:

Vue.component('my-component',{

'template' : '{{message}}', 'data' : { 'message' : 'hello' } })

1

2

3

4

5

6

那么Vue会停止,并在控制台发出警告,告诉你在组件中data必须是函数。理解这种规则存在的意义很有帮助,让我们假设用如下方式来避开Vue的警告:

1

2

3

4

5

var data = {counter : 0}

Vue.component('simple-counter',{ 'template' : '{{counter}}' //技术上data是一个函数,所以Vue不会警告 //但是我们返回给每个组件的实例调用了同一个data对象 'data' : function (){ return data } }) new Vue({ 'el' : '#app' })

1

2

3

4

5

6

7

8

9

10

11

12

13

14

由于这三个组件共享一个data,因此增加一个counter会影响所有组件!很明显,这样做是不对的。我们可以通过为每个组件返回全新的data对象来解决这个问题,如下:

data : function (){

return {

counter : 0 } }

1

2

3

4

5

现在每个counter都有它自己内部的状态了。

构成组件

组件意味着协同工作,通常父子组件会是这样的关系:组件A在它的模板中使用了组件B。它们之间必然需要相互通信:父组件要给子组件传递数据,子组件需要将它内部发生的事情告知给父组件。然而,在一个良好定义的接口中尽可能将父子组件解耦是很重要的。这保证了每个组件可以在相对隔离的环境中书写和理解,也大幅度提高了组件的可维护性和可重用性。

在Vue中,父子组件的关系可以总结为 props down, events up。父组件通过 props 向下传递数据给子组件,子组件通过 events 给父组件发送消息。看看它们是怎么工作的。如图:

相关文章:

  • db2 update覆盖更新_DLA访问TableStore的性能调优Hints、支持单字段update等
  • dubbo调用service后返回对象null_你玩了3年Dubbo,给我聊聊它的服务暴露过程?
  • 托福试卷真题_托福考试历年真题测试
  • vscode安装旧版本插件_vscode 常用插件安装
  • 联想笔记本键盘排线_笔记本排线坏了怎么修?笔记本排线接触不良怎么办?
  • eclipse导入mysql8.0驱动_eclipse jdbc连接MySQL8.0数据库详解
  • arcgis导入excel字段不显示_ArcGis属性字段操作技巧(上下标显示、批量删除)
  • 筛数方法相关系数_Spearman相关系数的变量筛选方法
  • miui删除内置不卡米教程_小米MIUI免ROOT一键删除系统内置软件
  • ffmpeg 录制指定窗口_音视频最简单基础知识一篇文章带你入门《ffmpeg干货》
  • es6 filter函数的用法_ES6新增数组方法
  • 记录方法用时_发明专利|一种微电网继电保护方法
  • docker容器访问sqlserver_Docker最全教程之MySQL容器化 (二十五)
  • 如何判断手机型号是5s_北斗导航如何启用?需要硬件支持,这些手机型号都可以使用...
  • 刷新报表_润乾报表 dashboard 分析
  • python3.6+scrapy+mysql 爬虫实战
  • 【Linux系统编程】快速查找errno错误码信息
  • 【译】理解JavaScript:new 关键字
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • eclipse(luna)创建web工程
  • Lsb图片隐写
  • Spark RDD学习: aggregate函数
  • vue.js框架原理浅析
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于webpack 的 vue 多页架构
  • 如何学习JavaEE,项目又该如何做?
  • 什么是Javascript函数节流?
  • 微信小程序开发问题汇总
  • 一个项目push到多个远程Git仓库
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​ArcGIS Pro 如何批量删除字段
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ###STL(标准模板库)
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (转)iOS字体
  • (转)socket Aio demo
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .net 验证控件和javaScript的冲突问题
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .netcore 获取appsettings
  • .net开发引用程序集提示没有强名称的解决办法
  • :O)修改linux硬件时间
  • [ C++ ] STL---stack与queue
  • [ IO.File ] FileSystemWatcher
  • [ JavaScript ] JSON方法
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [C++]C++类基本语法
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [hdu 4552] 怪盗基德的挑战书
  • [ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup
  • [Java][Android][Process] ProcessBuilder与Runtime差别