VUE全局api

一、什么是全局API?

全局API并不在构造器里,而是先声明全局变量或者直接在Vue上定义一些新功能,Vue内置了一些全局API,比如我们今天要学习的指令Vue.directive。说的简单些就是,在构造器外部用Vue提供给我们的API函数来定义新的功能。

二、Vue.directive自定义指令

我们在第一季就学习了内部指令,我们也可以定义一些属于自己的指令,比如我们要定义一个v-jspang的指令,作用就是让文字变成绿色。

在自定义指令前我们写一个小功能,在页面上有一个数字为10,数字的下面有一个按钮,我们每点击一次按钮后,数字加1.

你不妨模仿下面的功能,在自己本地先写出这个效果。我用JSRun提供了预览和代码展示功能,你也可以在线调试。

写好了这个功能,我们现在就自己定义一个全局的指令。我们这里使用Vue.directive( );

 可以看到数字已经变成了绿色,说明自定义指令起到了作用。可能您看这个代码还是有些不明白的,比如传入的三个参数到底是什么。

三、自定义指令中传递的三个参数

el: 指令所绑定的元素,可以用来直接操作DOM。

binding:  一个对象,包含指令的很多信息。

vnode: Vue编译生成的虚拟节点。

 

四、自定义指令的生命周期

自定义指令有五个生命周期(也叫钩子函数),分别是 bind,inserted,update,componentUpdated,unbind

  1. bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作。
  2. inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。
  3. update:被绑定于元素所在的模板更新时调用,而无论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
  4. componentUpdated:被绑定元素所在模板完成一次更新周期时调用。
  5. unbind:只调用一次,指令与元素解绑时调用。

 

 


 

第2节:Vue.extend构造器的延伸

一、什么是Vue.extend?

Vue.extend 返回的是一个“扩展实例构造器”,也就是预设了部分选项的Vue实例构造器。经常服务于Vue.component用来生成组件,可以简单理解为当在模板中遇到该组件名称作为标签的自定义元素时,会自动调用“扩展实例构造器”来生产组件实例,并挂载到自定义元素上。

由于我们还没有学习Vue的自定义组件,所以我们先看跟组件无关的用途。

 

二、自定义无参数标签

我们想象一个需求,需求是这样的,要在博客页面多处显示作者的网名,并在网名上直接有链接地址。我们希望在html中只需要写<author></author> ,这和自定义组件很像,但是他没有传递任何参数,只是个静态标签。

我们的Vue.extend该登场了,我们先用它来编写一个扩展实例构造器。代码如下:

 

这时html中的标签还是不起作用的,因为扩展实例构造器是需要挂载的,我们再进行一次挂载。

这时我们在html写<author><author>就是管用的。我们来看一下全部代码:

最终实现结果:
三、挂载到普通标签上

还可以通过HTML标签上的id或者class来生成扩展实例构造器,Vue.extend里的代码是一样的,只是在挂载的时候,我们用类似jquery的选择器的方法,来进行挂载就可以了。

 

 


 

第3节:Vue.set全局操作

Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法。比如在vue构造器内部定义了一个count为1的数据,我们在构造器外部定义了一个方法,要每次点击按钮给值加1.就需要用到Vue.set。

一、引用构造器外部数据:

什么是外部数据,就是不在Vue构造器里里的data处声明,而是在构造器外部声明,然后在data处引用就可以了。外部数据的加入让程序更加灵活,我们可以在外部获取任何想要的数据形式,然后让data引用。

看一个简单的代码:

二、在外部改变数据的三种方法:

1、用Vue.set改变

2、用Vue对象的方法添加

3、直接操作外部数据

其实这三种方式都可以操作外部的数据,Vue也给我们增加了一种操作外部数据的方法。

三、为什么要有Vue.set的存在?

由于Javascript的限制,Vue不能自动检测以下变动的数组。

*当你利用索引直接设置一个项时,vue不会为我们自动更新。

*当你修改数组的长度时,vue不会为我们自动更新。

看一段代码:

这时我们的界面是不会自动跟新数组的,我们需要用Vue.set(app.arr,1,’ddd’)来设置改变,vue才会给我们自动更新,这就是Vue.set存在的意义。

 

 


 

第4节:Vue的生命周期(钩子函数)

Vue一共有10个生命周期函数,我们可以利用这些函数在vue的每个阶段都进行操作数据或者改变内容。

其实在Vue的官网有一张图已经很好的诠释了生命周期,我在这里就不再多讲了,直接贴图,然后上程序代码。

 

我们直接来看一段代码:

 


 

第5节:Template 制作模版

一、直接写在选项里的模板

直接在构造器里的template选项后边编写。这种写法比较直观,但是如果模板html代码太多,不建议这么写。

javascript代码:

这里需要注意的是模板的标识不是单引号和双引号,而是,就是Tab上面的键。

二、写在<template>标签里的模板

这种写法更像是在写HTML代码,就算不会写Vue的人,也可以制作页面。

 

三、写在<script>标签里的模板

这种写模板的方法,可以让模板文件从外部引入。

这节课我们学习了Template的三种写法,以后学习到vue-cli的时候还会学到一种xxx.vue的写法。


 

第6节:Component 初识组件

前言(废话):component组件是Vue学习的重点、重点、重点,重要的事情说三遍。所以你必须学好Vue component。其实组件就是制作自定义的标签,这些标签在HTML中是没有的。比如:<jspang></jspang>,那我们就开始学习这种技巧吧。

一、全局化注册组件

全局化就是在构造器的外部用Vue.component来注册,我们注册现在就注册一个<jspang></jspang>的组件来体验一下。

我们在javascript里注册了一个组件,在HTML中调用了他。这就是最简单的一个组件的编写方法,并且它可以放到多个构造器的作用域里。

二、局部注册组件局部注册组件和全局注册组件是向对应的,局部注册的组件只能在组件注册的作用域里进行使用,其他作用域使用无效。

 

从代码中你可以看出局部注册其实就是写在构造器里,但是你需要注意的是,构造器里的components 是加s的,而全局注册是不加s的。

三、组件和指令的区别

组件注册的是一个标签,而指令注册的是已有标签里的一个属性。在实际开发中我们还是用组件比较多,指令用的比较少。因为指令看起来封装的没那么好,这只是个人观点。

 


 

第7节:Component 组件props 属性设置

props选项就是设置和获取标签上的属性值的,例如我们有一个自定义的组件<panda></panda>,这时我们想给他加个标签属性写成<panda here=’China’></panda> 意思就是熊猫来自中国,当然这里的China可以换成任何值。定义属性的选项是props。

一、定义属性并获取属性值

定义属性我们需要用props选项,加上数组形式的属性名称,例如:props:[‘here’]。在组件的模板里读出属性值只需要用插值的形式,例如{{ here }}.

上面的代码定义了panda的组件,并用props设置了here的属性值,在here属性值里传递了China给组件。

最后输出的结果是红色字体的Panda from China.

二、属性中带’-‘的处理方式

我们在写属性时经常会加入’-‘来进行分词,比如:<panda   from-here=”China”></panda>,那这时我们在props里如果写成props:[‘form-here’]是错误的,我们必须用小驼峰式写法props:[‘formHere’]。

html文件:

javascript文件:

PS:因为这里有坑,所以还是少用-为好。

三、在构造器里向组件中传值

把构造器中data的值传递给组件,我们只要进行绑定就可以了。就是我们第一季学的v-bind:xxx.

我们直接看代码:

Html文件:

javascript文件:

 

 

 


 

第8节:Component 父子组件关系

在实际开发中我们经常会遇到在一个自定义组件中要使用其他自定义组件,这就需要一个父子组件关系。

一、构造器外部写局部注册组件

上面上课我们都把局部组件的编写放到了构造器内部,如果组件代码量很大,会影响构造器的可读性,造成拖拉和错误。

我们把组件编写的代码放到构造器外部或者说单独文件。

我们需要先声明一个对象,对象里就是组件的内容。

声明好对象后在构造器里引用就可以了。

html中引用

 

二、父子组件的嵌套

我们先声明一个父组件,比如叫jspang,然后里边我们加入一个city组件,我们来看这样的代码如何写。

 

 


 

第9节:Component 标签

<component></component>标签是Vue框架自定义的标签,它的用途就是可以动态绑定我们的组件,根据数据的不同更换不同的组件。

1.我们先在构造器外部定义三个不同的组件,分别是componentA,componentB和componentC.

2.我们在构造器的components选项里加入这三个组件。

3.我们在html里插入component标签,并绑定who数据,根据who的值不同,调用不同的组件。

这就是我们的组件标签的基本用法。我们提高以下,给页面加个按钮,每点以下更换一个组件。

转载于:https://www.cnblogs.com/vervin/p/8290574.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486982.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vts传感器采取船舶的_智慧船舶交通管理系统

技术参数1、信息处理单台服务器水上目标(含移动和静止目标)实时处理容量≥10000个&#xff0c;可扩展。2、二三维显示性能单个工作台上显示水上目标数&#xff1a;10000个。3、VTS雷达录取点迹处理能力≥2000点/s。航迹处理能力≥1000批/转(22转/min)。航迹处理延时≤1s。功能描…

美国运通使用AI技术检测欺诈行为 增强安全性

来源丨Forbes编译丨科技行者多年以来&#xff0c;美国运通一直是人工智能与认知技术领域的领导者。作为坐拥有庞大忠实客户群体的全球金融服务机构&#xff0c;保障客户账户安全一直是运通职能的重中之重。在很长一段时间里&#xff0c;发现并制止欺诈行为一直是美国运通公司的…

未来趋势?通过无线技术管理汽车电池,可消除90%物理布线

电动汽车的电池寿命要求远比手机电池要高。来源 | 雷锋网作者 | 伍文靓雷锋网按&#xff0c;当智能手机中的电池损耗殆尽&#xff0c;无法满足正常使用的续航体验时&#xff0c;用户往往会选择换一台新的设备&#xff0c;以此来解决问题。这是十分常规的操作。然而&#xff0c…

MySQL ERROR 1045 (28000): Access denied for user 'root'@'192.168.23.224' (using password: YES)

出现如题错误可能原因&#xff1a; 1、密码有误。检查密码是否与 mysql.user 中 root 用户对应密码一致&#xff08;我就是这个原因&#xff0c;被折磨整个下午和晚上&#xff09; 2、用户 root 没有授权&#xff0c;授权命令如下&#xff1a; grant all on *.* to root% ident…

nacos 怎么配置 里的配置ip_nacos集群配置

一、环境准备Nacos 依赖 java环境来运行。如果您是从代码开始构建并运行Nacos&#xff0c;还需要为此配置 Maven环境&#xff0c;请确保是在以下版本环境中安装使用:64 bit OS&#xff0c;支持 Linux/Unix/Mac/Windows&#xff0c;推荐选用 Linux/Unix/Mac。64 bit JDK 1.8&…

RF MEMS开关时代将开启?

来源&#xff1a;内容编译自「IEEE」&#xff0c;谢谢。二十年前&#xff0c;专门研究射频电路的工程师设想了一种“理想的开关”。这种开关“打开”时&#xff0c;它将具有超低电阻&#xff0c;“关闭”时将具有超高电阻等等。它体积小巧&#xff0c;快速&#xff0c;易于制造…

BZOJ3245: 最快路线 拆点dijkstra

150个点&#xff0c;500种速度&#xff0c;乘起来大概8e4个点&#xff0c;3e4的边 其他题解写的基本都是spfa&#xff0c;想想dij也能做&#xff0c;还挺快 #include<bits/stdc.h> //#pragma comment(linker, "/STACK:1024000000,1024000000") #include&l…

3dmax体积雾渲染不出来_【扮家家云渲染效果图】3Dmax体积光制作丛林光束|干货教程...

首先打开场景文件场景中创建了一些树木组成了森林的效果。首先要为场景创建灯光。单击创建&#xff0c;选择灯光&#xff0c;将类型切换为标准。接着单击目标平行光。在场景中拖拽进行创建&#xff0c;创建一盏目标平行光&#xff0c;然后单击修改&#xff0c;勾选阴影&#xf…

干货 | 机器人视觉三维成像技术全解析

来源&#xff1a;机器人创新生态在工业4.0时代&#xff0c;国家智能制造高速发展&#xff0c;传统的编程来执行某一动作的机器人已经难以满足现今的自动化需求。在很多应用场景下&#xff0c;需要为工业机器人安装一双眼睛&#xff0c;即机器人视觉成像感知系统&#xff0c;使机…

61二叉搜索树的第k个结点

题目描述 给定一颗二叉搜索树&#xff0c;请找出其中的第k大的结点。例如&#xff0c; 5 / \ 3 7 /\ /\ 2 4 6 8 中&#xff0c;按结点数值大小顺序第三个结点的值为4。思路&#xff1a;二叉搜索树的中序遍历是递增的序列&#xff0c;使用循环的中序遍历找到第k个节点就行了&am…

python海龟绘图_Python教学案例|海龟绘图三例

说明&#xff1a;海龟绘图网上的案例非常多&#xff0c;网上百度一搜就可以找到各种各样的不同绘图参考代码&#xff0c;简单的有&#xff0c;难的有绘制梵高画、九大行星图等等&#xff0c;有需求的最好问度娘&#xff0c;简单又方便。分享Python 基础教程:https://www.runoob…

后香农时代,华为提出10大数学挑战问题

来源&#xff1a;机器之心编辑&#xff1a;杜伟后香农时代的通信技术会如何发展&#xff1f;又有哪些值得业界关注的数学问题呢&#xff1f;在上月底结束的长沙「数学促进企业创新发展论坛」上&#xff0c;华为董事、战略研究院院长徐文伟抛出了后香农时代信息产业发展面临的了…

Oracle中如何查询一个表的所有字段名和数据类型

Oracle中如何查询一个表的所有字段名和数据类型 查询语法 select A.COLUMN_NAME,A.DATA_TYPE from user_tab_columns A where TABLE_NAME表名 查询例子 select A.COLUMN_NAME,A.DATA_TYPE from user_tab_columns A where TABLE_NAMEPUB_GOODS 添加排序后例子 select A.COLUMN…

wdcp mysql远程_CentOS下WDCP下的MYSQL开启远程连接

在 Windows 主机中点击开始菜单&#xff0c;运行&#xff0c;输入“cmd”&#xff0c;进入控制台&#xff0c;然后cd 进入MySQL 的 bin 目录下&#xff0c;然后输入下面的命令。> MySQL -uroot -p123456 (123456 为 root 用户的密码。)如何开启MySQL的远程帐…

美智库:下一代国防战略之竞争战略

来源&#xff1a;远望智库预见未来编译&#xff1a; 张涛&#xff08;远望智库技术预警中心&#xff09;美国新国家安全中心(CNAS)日前发布题为《竞争战略》的文章&#xff0c;作者梅兰妮西森撰文分析认为五角大楼的下一代国防战略需要一种能够说服盟友和胁迫对手的竞争战略。背…

mysql key buffer_mysql 开发进阶篇系列 16 MySQL Server(myisam key_buffer)

一.概述mysql 提供了很多参数来进行服务器的设置&#xff0c;当服务第一次启动的时候&#xff0c;所有启动参数值都是系统默认的。这些参数在很多生产环境下并不能满足实际的应用需求。在这个系列中涉及到了linux 服务器&#xff0c;我这里是centos7.4, mysql 5.7,Xshell6。1. …

这里有一张中国的数字化地图,请查收

来源&#xff1a;腾讯研究院今天&#xff0c;在2020腾讯全球数字生态大会上&#xff0c;腾讯研究院联合腾讯云发布了《数字中国指数报告&#xff08;2020&#xff09;》。此次发布的报告显示&#xff1a;2019年数字中国指数继续保持高速增长&#xff0c;其中&#xff0c;以珠三…

mysql中的强制索引_MYSQL中常用的强制性操作(例如强制索引)

mysql常用的hint对于经常使用oracle的朋友可能知道&#xff0c;oracle的hint功能种类很多&#xff0c;对于优化sql语句提供了很多方法。同样&#xff0c;在mysql里&#xff0c;也有类似的hint功能。下面介绍一些常用的。强制索引 FORCE INDEX复制代码代码如下:SELECT * FROM TA…

华为王成录:把安卓最核心部分换得差不多了 手机升级鸿蒙OS 2.0水到渠成

内容来自网易新闻9月10日下午&#xff0c;华为在东莞松山湖举办了2020华为开发者大会&#xff0c;发布了鸿蒙OS 2.0、EMUI 11&#xff0c;并介绍HMS生态目前最新的成果和进展。大会上&#xff0c;华为消费者业务CEO余承东表示&#xff0c;鸿蒙OS 2.0全面使能全场景生态&#xf…

python学习随笔day3

文档读写 #文档内容切片fopen(abc,r,encodingutf-8) #abc是文档名称count 0;for line in f: if count9: print("--------------------------------切割线----------------------------------") count 1 continue print(line.strip()) …