广告
返回顶部
首页 > 资讯 > 精选 >JS框架之vue.js怎么应用
  • 267
分享到

JS框架之vue.js怎么应用

2023-07-04 09:07:25 267人浏览 薄情痞子
摘要

这篇文章主要讲解了“js框架之vue.js怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS框架之Vue.js怎么应用”吧!1.举个栗子//model层:// 通过exte

这篇文章主要讲解了“js框架vue.js怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS框架之Vue.js怎么应用”吧!

1.举个栗子

//model层:// 通过extend方式定义一个Vue组件var MyComponent = Vue.extend({template: '<div>A custom component!</div>'})// 向Vue注册这个组件,名称定为my-componentVue.component('my-component', MyComponent)// 创建根实例new Vue({el: '#example'})//Vue层:<div id="example"><my-component></my-component></div>

渲染为:

<div id="example"><div>A custom component!</div></div>

就是这个栗子,差点把我忽悠了,以为前面对extend的概念理解错了。还记得前面是这么描述
var MyComponent = Vue.extend()的,Vue相当于基类,MyComponent继承了Vue,拥有了Vue的属性和方法,但是继承的概念还有另一层,就是基类是木有子类自定义的属性和方法的。这里的子类MyComponent扩展了一个属性template,按照继承的说法,Vue基类是不能使用的,但是这个栗子看似违背了这个规则,最后创建的是Vue实例,同时让模板生效了。正常的写法不是应该这样:

//model层:// 通过extend方式定义一个Vue组件var MyComponent = Vue.extend({template: '<div>A cu stom component!</div>'})// 不用注册//Vue.component('my-component', MyComponent)// 创建MyComponent 实例new MyComponent ({el: '#example'})//Vue层:<div id="example">//不用组件//<my-component></my-component></div>

经过试验,这种写法确实没错,也可以正常显示。问题来了,为什么第一种写法也是可以的,比较两处代码,发现第一种写法有一个注册过程,注册了一个my-component,最后使用的也是这个my-component,仔细想想,并不是说Vue实例可以使用template,而是向Vue注册了这个组件后,Vue实例就可以使用这个组件了,所以并不冲突。(吓死宝宝了- -)

想清楚这个后,再来考虑另外一个问题,这两种写法的区别在于哪里?
有没有发现,第二种写法其实是很有限制的,他替换了整个div,不管div中有多少内容。比如:

<div id="example">ssssdfsdaf<button>abc</button></div>

最后统统不见,被替换成<div>A cu stom component!</div>。灵活度太低,如果我只想替换ssssdfsdaf怎么办?所以就要用第一种方式了,于是幡然醒悟,原来这就是组件,就像一个零件一样,想往哪塞就往哪塞:

<div id="example"><my-template>ssssdfsdaf<my-template><button>abc</button></div>

另外,注册必须在新建实例前,反过来的话,新建的实例肯定不能使用组件的。

原文还说replace可以决定是否替换,这个不知道咋用,先留一坑在这,后面看看能否用上。 //坑1

2.组件注册有两种方式:

一是前面看到的全局注册方式,Vue.component,这种全局可用。

二是局部注册方式

// 局部注册也可以这么做var Parent = Vue.extend({components: {'my-component': {template: '<div>A custom component!</div>'}}})

这种写法最简,很明显Parent扩展了Vue,拥有了组件my-component。此时的组件只有Parent能用,Vue不能用。

3.is属性

组件在使用的过程中也是有限制的。原因在于:

Vue 的模板是 DOM 模板,使用浏览器原生的解析器而不是自己实现一个。所以组件被替换后必须依照html的正常标准来,它必须是有效的 HTML 片段。一些 HTML 元素对什么元素可以放在它里面有限制。常见的限制:

a 不能包含其它的交互元素(如按钮,链接)

ul 和 ol 只能直接包含 li

select 只能包含 option 和 optgroup

table 只能直接包含 thead, tbody, tfoot, tr, caption, col, colgroup

tr 只能直接包含 th 和 td

以table为例

<table><my-component></my-component><my-component></my-component></table>// 定义var MyComponent = Vue.extend({template: '<tr>A custom component!</tr>'})

这样的写法看似正常,因为<table><tr></tr></table>结构是正常的,但是实际上不能依赖自定义组件在浏览器验证之前的展开结果,所以这里不被认为是<tr>。为此,is属性便有作用了,将以上写法改写:

<table><tr is="my-component"></tr> //这里改成is属性<tr is="my-component"></tr><tr is="my-component"></tr></table>// 定义var MyComponent = Vue.extend({template: '<div>A custom component!</div>' //这里不能用tr})

修改后,相当于

<table><tr><my-component></my-component></tr><tr><my-component></my-component></tr><tr><my-component></my-component></tr></table>

保留了原来的tr,所以dom解析不会出错

4.Props:组件通讯的手段

1“prop” 是组件数据的一个字段,期望从父组件传下来。子组件需要显式地用 props 选项 声明 props:

Vue.component('child', {// 声明 props,这里驼峰式命名props: ['myMessage'],//模板中可以这样用template: '<span>{{ myMessage }}</span>'})

HTML 特性不区分大小写。名字形式为 camelCase 驼峰式的 prop 用作特性时,需要转为 kebab-case(短横线隔开),所以html中是这个样子的:

<!-- kebab-case in HTML --><child my-message="hello!"></child>

以上这种是props的静态用法,也可以用 v-bind 绑定动态 Props 到父组件的数据。每当父组件的数据变化时,也会传导给子组件:

<div><input v-model="parentMsg"><br><child v-bind:my-message="parentMsg"></child></div>

这时候看到v-model有点懵逼,这货不是跟{{}}类似,引用data属性中的parentMsg吗?此时肯定是没有定义parentMsg的,所以v-bind:my-message=”parentMsg”绑定组件的同时,赋予了父组件parentMsg属性。

4.2 prop的绑定类型:

prop 默认是单向绑定:当父组件的属性变化时,将传导给子组件,但是反过来不会。这是为了防止子组件无意修改了父组件的状态——这会让应用的数据流难以理解。不过,也可以使用 .sync 或 .once 绑定修饰符显式地强制双向或单次绑定:

<!-- 默认为单向绑定 --><child :msg="parentMsg"></child><!-- 双向绑定 --><child :msg.sync="parentMsg"></child><!-- 单次绑定 --><child :msg.once="parentMsg"></child>

双向绑定会把子组件的 msg 属性同步回父组件的 parentMsg 属性。单次绑定在建立之后不会同步之后的变化。这里原文还特定强调了下, prop 是一个对象或数组时,是按引用传递,修改内容会随时修改父组件内容,这个有语言基础的都知道。

4.3 prop验证:

组件可以为 props 指定验证要求。当组件给其他人使用时这很有用,因为这些验证要求构成了组件的 api,确保其他人正确地使用组件。此时 props 的值是一个对象({}而不是[]),包含验证要求:

Vue.component('example', {props: {// 基础类型检测 (`null` 意思是任何类型都可以)propA: Number,// 多种类型 (1.0.21+)propM: [String, Number],// 必需且是字符串propB: {type: String,required: true},// 数字,有默认值propC: {type: Number,default: 100},// 对象/数组的默认值应当由一个函数返回propD: {type: Object,default: function () {return { msg: 'hello' }}},// 指定这个 prop 为双向绑定// 如果绑定类型不对将抛出一条警告propE: {twoWay: true},// 自定义验证函数propF: {validator: function (value) {return value > 10}},// 转换函数(1.0.12 新增)// 在设置值之前转换值propG: {coerce: function (val) {return val + '' // 将值转换为字符串}},propH: {coerce: function (val) {return JSON.parse(val) // 将 JSON 字符串转换为对象}}}})

type 可以是下面原生构造器:

String

Number

Boolean

Function

Object

Array

type 也可以是一个自定义构造器,使用 instanceof 检测。

当 prop 验证失败了,Vue 将拒绝在子组件上设置此值,如果使用的是开发版本会抛出一条警告。

这里也是看的我一脸懵逼,连个栗子都不给,拿刚才的例子改一下打个比方

Vue.component('child', {// 声明 props,这里驼峰式命名props: ['myMessage'],//模板中可以这样用template: '<span>{{ myMessage+1}}</span>' //改成表达式})<!-- kebab-case in HTML --><child my-message="hello!"></child> //这里先不改

如果我们希望别人把child组件的myMessage当做Number类型来处理,而我们这里又没有做prop验证,结果就是{{ myMessage+1}}会变成字符串拼接,当html传入的是hello!,渲染出来结果:hello!

所以说,告诉别人这里要传入Number类型是必要的,于是改为:

Vue.component('child', {// 声明 props,这里驼峰式命名props: {myMessage:Number},//模板中可以这样用template: '<span>{{ myMessage+1}}</span>' //改成表达式})

这时候如果传入hello!,此时渲染结果?没错,就是NaN。这样别人就知道要传入一个数字了。
如果这样传入

<child my-message="123"></child> //改成123

这样总行了吧,运行,他喵的居然还不行,还是NaN。原文有这样的解释:

//#字面量语法 vs. 动态语法//初学者常犯的一个错误是使用字面量语法传递数值:<!-- 传递了一个字符串 "1" --><comp some-prop="1"></comp>因为它是一个字面 prop,它的值以字符串 "1" 而不是以实际的数字传下去。如果想传递一个实际的 javascript 数字,需要使用动态语法,从而让它的值被当作 JavaScript 表达式计算:<!-- 传递实际的数字 --><comp :some-prop="1"></comp>

好吧,也就是说刚才传递的实际上是字符串”123”,结果必然是NaN,再改:

<child :my-message="123"></child> //改成123

此时{{myMessage+1}}会得到正确的结果:124

感谢各位的阅读,以上就是“JS框架之vue.js怎么应用”的内容了,经过本文的学习后,相信大家对JS框架之vue.js怎么应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: JS框架之vue.js怎么应用

本文链接: https://www.lsjlt.com/news/344040.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JS框架之vue.js怎么应用
    这篇文章主要讲解了“JS框架之vue.js怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS框架之vue.js怎么应用”吧!1.举个栗子//model层:// 通过exte...
    99+
    2023-07-04
  • Java框架设计之反射怎么应用
    这篇文章主要讲解了“Java框架设计之反射怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java框架设计之反射怎么应用”吧!框架:半成品软件。可以在框架的基础上进行软件开发,简化编码...
    99+
    2023-07-02
  • node.js之koa框架怎么用
    这篇文章将为大家详细讲解有关node.js之koa框架怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Koa -- 基于 Node.js 平台的下一代 web 开发框...
    99+
    2022-10-19
  • pytorch框架怎么应用
    本篇内容介绍了“pytorch框架怎么应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一.pytorch概述1.pytorch概念Pyto...
    99+
    2023-07-06
  • Python之ORM框架怎么使用
    本文小编为大家详细介绍“Python之ORM框架怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python之ORM框架怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Python语言中有哪些常...
    99+
    2023-07-02
  • 鸿蒙ACE框架之如何使用JS调用C++
    这篇文章主要介绍“鸿蒙ACE框架之如何使用JS调用C++”,在日常操作中,相信很多人在鸿蒙ACE框架之如何使用JS调用C++问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”鸿蒙ACE框架之如何使用JS调用C++...
    99+
    2023-06-15
  • Java SSM框架怎么应用
    这篇文章主要介绍了Java SSM框架怎么应用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java SSM框架怎么应用文章都会有所收获,下面我们一起来看看吧。一、什么是SSM框架?SSM框...
    99+
    2023-07-05
  • Django框架之路由怎么使用
    这篇文章主要介绍“Django框架之路由怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Django框架之路由怎么使用”文章能帮助大家解决问题。简介路由简单的来说就是根据用户请求的 URL 链...
    99+
    2023-07-02
  • java的Structs框架怎么应用
    要使用Struts框架,首先需要进行以下步骤:1. 下载Struts框架:你可以从官方网站下载最新的Struts框架。解压下载的文件...
    99+
    2023-09-14
    java Structs
  • web基础之Structs框架怎么使用
    Structs是一个用于构建Web应用程序的开源Java框架。它提供了一些核心功能,如表单验证、国际化、数据绑定等,使开发人员能够更...
    99+
    2023-09-29
    Structs
  • php之kohana框架怎么安装
    这篇文章给大家分享的是有关php之kohana框架怎么安装的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流与非主流的数据库。4、...
    99+
    2023-06-14
  • Android应用框架之应用启动过程详解
    在Android的应用框架中,ActivityManagerService是非常重要的一个组件,尽管名字叫做ActivityManagerService,但通过之前的博客介绍,...
    99+
    2022-06-06
    启动 框架 Android
  • 深度学习框架之MXNet怎么使用
    使用MXNet进行深度学习主要有以下几个步骤:1. 安装MXNet:可以通过pip命令进行安装,例如`pip install mxn...
    99+
    2023-09-21
    深度学习 MXNet
  • python爬虫入门之Scrapy框架怎么用
    这篇文章将为大家详细讲解有关python爬虫入门之Scrapy框架怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,P...
    99+
    2023-06-14
  • J-Focus0.4.0中JS动画应用框架的示例分析
    本篇文章给大家分享的是有关J-Focus0.4.0中JS动画应用框架的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。J-Focus (...
    99+
    2022-10-19
  • boost.asio框架系列之buffer函数怎么使用
    本文小编为大家详细介绍“boost.asio框架系列之buffer函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“boost.asio框架系列之buffer函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-02
  • python实现web应用框架之增加响应对象
    目录什么是响应对象我们如何新增响应对象呢?新增响应对象代码编写响应对象类的定义框架中对响应对象的解析功能测试总结本篇文章所编写的代码,已经放到了gitee上了:gitee.com/p...
    99+
    2023-05-19
    python web应用框架 python增加响应对象 python框架
  • 轻量级ORM框架Dapper应用之实现DTO
    一、什么是DTO 先来看看百度百科的解释: 数据传输对象(DTO)(Data Transfer Object),是一种设计模式之间传输数据的软件应用系统。数据传输目标往往是数据访问对...
    99+
    2022-11-13
  • 轻量级ORM框架Dapper应用之安装Dapper
    一、Dapper简介 Dapper是一款轻量级ORM框架,为解决网站访问流量极高而产生的性能问题而构造,主要通过执行TSQL表达式而实现数据库的CQRS。 如果你在项目中遇到性能访问...
    99+
    2022-11-13
  • boost.asio框架系列之定时器Timer怎么使用
    这篇文章主要介绍“boost.asio框架系列之定时器Timer怎么使用”,在日常操作中,相信很多人在boost.asio框架系列之定时器Timer怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”boo...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作