vue门户模板(vue 官网模板)

admin 245 2022-11-14

阿里云服务器优惠多,折扣错,惊喜多,请咨询:www.wqiis.com

本文目录一览:

Vue之数据三种显示在模板上的方法

{{}}:双大括号会将数据解析成纯文本

v-text:会将数据解析成纯文本

v-html:输出真正的 HTML

要显示的数据:

vue四种挂载方式区别

1.第一种,最常见.vue-cli模板就是这样

import Vue from 'vue'

import App from './App'

new Vue({

    el: '#app',                                  //#app 元素的 outerHTML 是 Vue 模板,该模板可以被编译成 render function。

    template: 'App/',

    components: { App }

})

2.第二种,这种挂载是直接挂载到入口文件index.html 的 id=app 的dom 元素上

new Vue({

    router,

    store,

}).$mount('#app')       

3.第三种,

new Vue({

    router,

    store,

    render: h = h(App)

}).$mount('#app')

4.第四种,

new Vue({

     el:'#app',  

     router,  

     render: h =h(App)

})

 5.第五种:

var options = {

    el: '#app',

     store,

     router,

     ...App

};

new Vue(options)

$mount()用于手动挂载

当Vue实例没有el属性时,则该实例尚没有挂载到某个dom中假如需要延迟挂载,可以在之后手动调用vm.$mount()方法挂载。

例如:newVue({router,render:h=h(App)}).$mount("#app");

render: x = x(App)// 这里的render: x = x(App)是es6的写法// 

转换过来就是: 暂且可理解为是渲染App组件// 

render:(function(x){// return x(App);// });

Vue3基础-模板语法

如果我们希望把数据显示到模板(template)中,使用最多的语法是 “Mustache”语法 (双大括号) 的文本插值。

并且我们前端提到过,data返回的对象是有添加到Vue的响应式系统 中,当data中的数据发生改变时,对应的内容也会发生更新。

当然,Mustache中不仅仅可以是data中的属性,也可以是一个JavaScript的表达式:

下面这种写法是语句不是表达式,所以是错误的:

v-once用于指定元素或者组件只渲染一次,当数据发生变化时,元素或者组件以及其所有的子元素将视为静态内容并且跳过,该指令可以用于性能优化。

如果添加到父节点,那么所有的子节点也是只会渲染一次:

用于更新元素的 textContent,等价于"Mustache"语法,而且"Mustache"语法更灵活。

默认情况下,如果我们展示的内容本身是 html 的,那么vue并不会对其进行特殊的解析。如果我们希望这个内容被Vue可以解析出来,那么可以使用 v-html 来展示。

效果如下:

v-pre用于跳过元素和它的子元素的编译过程,显示原始的Mustache标签。

跳过不需要编译的节点,加快编译的速度。

效果如下:

这个指令保持在元素上直到关联组件实例结束编译。

v-cloak 和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到组件实例准备完毕,主要用于解决闪动问题,现在Vue3一般不会出现这个问题了。

div 不会显示,直到编译结束。

前面讲的一系列指令,主要是将值插入到模板内容中。但是,除了内容需要动态来决定外,某些属性我们也希望动态来绑定。比如动态绑定a元素的href属性,动态绑定img元素的src属性。

绑定属性我们使用 v-bind: ,缩写 : ,用于动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。

v-bind用于绑定一个或多个属性值,或者向另一个组件传递props值(这个学到组件时再介绍),在开发中,有哪些属性需要动态进行绑定呢?还是有很多的,比如图片的链接src、网站的链接href、动态绑定一些类、样式等等。

v-bind有一个对应的语法糖,也就是简写方式,在开发中,我们通常会使用语法糖的形式,因为更简洁。

注意 :Vue2 template模板中只能有一个根元素,Vue3 template模板中允许有多个根元素。

在开发中,有时候我们的元素class也是动态的,比如:当数据为某个状态时,字体显示红色,当数据另一个状态时,字体显示黑色。

绑定class有两种方式:对象语法,数组语法。

① 对象语法:我们可以传给 :class (v-bind:class 的简写) 一个对象,以动态地切换 class。

② 数组语法:我们可以把一个数组传给 :class,以应用一个 class 列表;

我们可以利用v-bind:style来绑定一些CSS内联样式,这是因为某些样式我们需要根据数据动态来决定,比如某段文字的颜色,大小等等。

CSS属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名。

绑定style有两种方式:对象语法,数组语法。

① 对象语法:

② 数组语法: :style 的数组语法可以将多个样式对象应用到同一个元素上

在某些情况下,我们属性的名称可能也不是固定的。

前面我们无论绑定src、href、class、style,属性名称都是固定的,如果属性名称不是固定的,我们可以使用 :[属性名]=“值” 的格式来定义,这种绑定的方式,我们称之为动态绑定属性。

如果我们希望将一个对象的所有属性,绑定到元素上的所有属性,应该怎么做呢?非常简单,我们可以直接使用 v-bind 绑定一个对象。

如下:info对象会被拆解成div的各个属性。

前面我们绑定了元素的内容和属性,在前端开发中另外一个非常重要的特性就是交互。

在前端开发中,我们需要经常和用户进行各种各样的交互,这个时候,我们就必须监听用户发生的事件,比如点击、拖拽、键盘事件等等。

在Vue中如何监听事件呢?使用v-on指令。接下来我们来看一下v-on的用法:

我们可以使用v-on来监听一下点击的事件:

v-on:click可以写成@click,是它的语法糖写法:

当然,我们也可以绑定其他的事件:

如果我们希望一个元素绑定多个事件,这个时候可以传入一个对象:

当通过methods中定义方法,以供@click调用时,需要注意参数问题:

情况一:如果该方法不需要额外参数,那么方法后的()可以不添加,并且方法的实现不用参数,直接就可以打印event。

情况二:如果需要同时传入某个参数和event时,可以通过$event传入事件,并且方法的实现必须按顺序写明参数。

@keyup.enter 代表enter键弹起的时候会调用onEnter方法,我们一般在方法里面获取输入的值:

在某些情况下,我们需要根据当前的条件决定某些元素或组件是否渲染,这个时候我们就需要进行条件判断了。

Vue提供了下面的指令来进行条件判断:

下面我们来对它们进行学习。

v-if、v-else、v-else-if 用于根据条件来渲染某一块的内容,这些内容只有在条件为true时,才会被渲染出来,这三个指令与JavaScript的条件语句 if、else、else if 类似。

v-if 的渲染原理:v-if是惰性的,当条件为false时,其判断的内容完全不会被渲染或者会被销毁掉,当条件为true时,才会真正渲染条件块中的内容。

因为v-if是一个指令,所以必须将其添加到一个元素上,但是如果我们希望切换的是多个元素呢?

如果此时我们使用div包裹,div会被渲染到界面上来,但是我们并不希望div被渲染,这个时候,我们可以选择使用template,template元素可以当做不可见的包裹元素,并且 v-if 可以添加到 template 上,但是最终template不会被渲染出来,类似于小程序中的block。

v-show和v-if的用法看起来是一致的,也是根据一个条件决定是否显示元素或者组件。

首先,在用法上的区别:

其次,本质的区别:

开发中如何进行选择呢?

在真实开发中,我们往往会从服务器拿到一组数据,并且需要对其进行渲染。这个时候我们可以使用v-for来完成,v-for类似于JavaScript的for循环,可以用于遍历一组数据。

v-for的基本格式是 "item in 数组" ,数组通常是来自data或者prop,也可以是其他方式,item是我们给每项元素起的一个别名,这个别名可以自定来定义。

我们知道,在遍历一个数组的时候会经常需要拿到数组的索引,如果我们需要索引,可以使用格式 "(item, index) in 数组" ,注意顺序,数组元素项item在前面,索引项index在后面。

类似于v-if,你可以使用 template 元素来循环渲染一段包含多个元素的内容。

我们使用template来对多个元素进行包裹,而不是使用div来完成,因为div会被渲染,template不会被渲染。而且如果有ul,ul里面不推荐放div,只推荐放li。

Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新,这些被包裹过的方法包括:

上面的方法会直接修改原来的数组,所以视图会跟着更新。但是某些方法不会替换原来的数组,而是会生成新的数组,比如 filter()、concat() 和 slice(),这时候我们可以通过重新赋值的方式触发视图更新,如下:

在使用v-for进行列表渲染时,我们通常会给元素或者组件绑定一个key属性。

这个key属性有什么作用呢?

我们先来看一下官方的解释:key属性主要用在Vue的虚拟DOM算法,在新旧nodes对比时辨识VNodes。如果不使用key,Vue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法,而使用key时,它会基于key的变化重新排列元素顺序,并且会移除/销毁key不存在的元素。

官方的解释对于初学者来说并不好理解,比如下面的问题:

什么是新旧nodes,什么是VNode?

没有key的时候,如何尝试修改和复用的?

有key的时候,如何基于key重新排列的?

我们先来解释一下VNode的概念:

VNode的全称是Virtual Node,也就是虚拟节点。事实上,无论是组件还是元素,它们最终在Vue中表示出来的都是一个个VNode。VNode的本质是一个JavaScript的对象。

如果我们不只是一个简单的div,而是有一大堆的元素,那么它们应该会形成一个VNode Tree。

我们先来看一个案例:这个案例是当我们点击按钮时会在li中间插入一个f。

我们可以确定的是,这次更新对于ul和button是不需要进行更新,需要更新的是我们li的列表。在Vue中,对于相同父元素的子元素节点并不会重新渲染整个列表,因为对于列表中 a、b、c、d它们都是没有变化的。在操作真实DOM的时候,我们只需要在中间插入一个f的li即可。

那么Vue中对于列表的更新究竟是如何操作的呢?

Vue事实上会对于有key和没有key会调用两个不同的方法,有key,那么就调用 patchKeyedChildren方法,没有key,那么就调用 patchUnkeyedChildren方法。

没有key的diff算法:

我们会发现上面的diff算法效率并不高,c和d来说它们事实上并不需要有任何的改动,但是因为我们的c被f所使用了,所有后续所有的内容都要一次进行改动,并且最后进行新增。

有key的diff算法:

所以我们可以发现,Vue在进行diff算法的时候,会尽量利用我们的key来进行优化操作,在没有key的时候我们的效率是非常低效的,在进行插入或者重置顺序的时候,保持相同的key可以让diff算法更加的高效。

Vue基础篇

内容简介:

1)Vue指令

2)computed和watch

3)生命周期钩子

4)组件间的传参

5)插槽

6)修饰符

7)nextTick()

前端三大框架:

Vue:尤雨溪开发

React:Facebook主导开发

Angular:谷歌主导开发

为什么选择Vue?

1.国内Vue的市场份额占比多

2.简单易上手,非常适合前端开发初学者学习

前置知识:

1.HTML、CSS和JS基础

2.了解Node和npm

3.webpack(可选,vue-cli已经封装了打包功能)

使用Vue的两种方式:

1.直接script标签引入vue.js文件

2.基于Node环境创建Vue项目(使用vue-cli初始化一个Vue项目)

前端框架与库的区别

• jquery 库 - DOM(操作DOM) + 动画+ ajax请求

• 框架 - 全方位功能

一、指令

指令(Directives)是带有 v- 前缀的特殊属性。

插值表达式和v-text指令被直接解析为字符串;元素绑定 v-html 指令后,解析了msg 变量值里面的html标签,输出真正的html元素。

v-model也可用在自定义组件上。

5.v-for(列表渲染)

使用v-for时应绑定key属性,key属性可以用来提升v-for渲染的效率

Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新。这些被包裹过的方法包括:

push()

pop()

shift()

unshift()

splice()

sort()

reverse()

由于 JavaScript 的限制,Vue 不能检测数组、对象的以下变化:1. 利用索引直接设置数组的某一项 2. 对象属性的添加或删除

二、computed和watch

三、生命周期钩子

什么是Vue生命周期?

Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程。

总共分为8个阶段:创建前/后,挂载前/后,更新前/后,销毁前/后。

1)beforeCreate

此时实例上只有一些生命周期函数和默认的事件,此时data computed watch methods上的方法和数据均不能访问。

2)created

此时可以读取data的值,并可以对其进行操作,把方法、计算属性也都挂载到了实例。但是依旧不能访问el,不能获取到DOM元素。

在这个钩子函数中,我们可以进行http请求,把请求到的数据储存在data中。

3)模板编译,把data里面的数据和vue语法写的模板编译成HTML

4)beforeMount

将编译完成的HTML挂载到对应虚拟DOM,此时还未挂载到页面上

5)mounted

编译好的HTML已挂载到页面上

6)beforeUpdate和updated

数据更新时调用,通常使用计算属性或侦听器取而代之

7)beforeDestroy

销毁所有观察者、组件及事件监听

8)destroyed

组件已经完全销毁,组件中的数据、方法、计算属性、过滤器等都已不可用。

四、组件间的通信

1.父子组件间的通信

父子组件通信可以总结为props向下传递,事件向上传递。

单向数据流:父级 prop 的更新会向下流动到子组件中,但反过来不行。

每个Vue实例都实现了事件接口:子组件使用 this.$emit(eventName,optionalPayload) 触发自定义事件。父组件在使用子组件的地方直接用v-on来监听子组件触发的事件。

父组件通过ref直接调用子组件中的方法。

子组件调用父组件中的方法:

1)子组件中通过 this.$parent.fatherMethod() 来调用父组件的方法

2)子组件用$emit向父组件触发一个事件,父组件监听这个事件

3)父组件通过props把方法传入子组件中(type: Function),在子组件里直接调用这个方法

2.兄弟组件间的通信

其中一种方法是让父组件充当两个子组件之间的中间件(中继);

另一种就是使用EventBus(事件总线),它允许两个组件之间直接通信,而不需要涉及父组件:

Vue原型上的方法:

五、插槽

3)作用域插槽

使用场景:

在使用ElementUI组件库的el-table组件时,表格的编辑和删除操作要用到作用域插槽。因为el-table组件,就是当前组件的子组件。通过作用域插槽很容易拿到当前表格行的索引和内容,这样就可以很方便地进行编辑、删除的操作。v-slot指令是Vue2.6之后,作用域插槽的新语法,旧语法(slot-scope)现在还保留,但3.0之后会移除。

六、修饰符

2.事件修饰符

vue提倡的是在方法中只有纯粹的数据逻辑,而不是去处理 DOM 事件细节,所以提供了事件修饰符用于DOM的事件处理。

3.按键修饰符

七、nextTick()

定义:在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。(当数据更新了,在dom中渲染后,自动执行nextTick的回调)

应用场景:需要在视图更新之后,基于新的视图进行操作。

上一篇:网站模板网址(网站模板网址大全)
下一篇:灯塔网站优化(灯塔网站打不开)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~