当前位置:首页 » 硬盘大全 » vue缓存使用说明书
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

vue缓存使用说明书

发布时间: 2022-04-24 06:45:52

‘壹’ Vue组件中prop属性使用说明实例代码详解

Prop
的大小写
(camelCase
vs
kebab-case)
HTML
中的特性名是大小写不敏感的,所以浏览器会把所有大写字符解释为小写字符。这意味着当你使用
DOM
中的模板时,camelCase
(驼峰命名法)

prop
名需要使用其等价的
kebab-case
(短横线分隔命名)
命名:
Vue.component('blog-post',
{
//

JavaScript
中是
camelCase

props:
['postTitle'],
template:
'<h3>{{
postTitle
}}</h3>'
})
<!--

HTML
中是
kebab-case

-->
<blog-post
post-title="hello!"></blog-post>
重申一次,如果你使用字符串模板,那么这个限制就不存在了。
静态的和动态的
Prop
像这样,你已经知道了可以像这样给
prop
传入一个静态的值:
<blog-post
title="My
journey
with
Vue"></blog-post>
你也知道
prop
可以通过
v-bind
动态赋值,例如:
<blog-post
v-bind:title="post.title"></blog-post>
在上述两个示例中,我们传入的值都是字符串类型的,但实际上任何类型的值都可以传给一个
prop。
传入一个数字
<!--
即便
`42`
是静态的,我们仍然需要
`v-bind`
来告诉
Vue
-->
<!--
这是一个
JavaScript
表达式而不是一个字符串。-->
<blog-post
v-bind:likes="42"></blog-post>
<!--
用一个变量进行动态赋值。-->
<blog-post
v-bind:likes="post.likes"></blog-post>
传入一个布尔值
<!--
包含该
prop
没有值的情况在内,都意味着
`true`。-->
<blog-post
favorited></blog-post>
<!--
即便
`false`
是静态的,我们仍然需要
`v-bind`
来告诉
Vue
-->
<!--
这是一个
JavaScript
表达式而不是一个字符串。-->
<base-input
v-bind:favorited="false">
<!--
用一个变量进行动态赋值。-->
<base-input
v-bind:favorited="post.currentUserFavorited">
传入一个数组
<!--
即便数组是静态的,我们仍然需要
`v-bind`
来告诉
Vue
-->
<!--
这是一个
JavaScript
表达式而不是一个字符串。-->
<blog-post
v-bind:comment-ids="[234,
266,
273]"></blog-post>
<!--
用一个变量进行动态赋值。-->
<blog-post
v-bind:comment-ids="post.commentIds"></blog-post>
传入一个对象
<!--
即便对象是静态的,我们仍然需要
`v-bind`
来告诉
Vue
-->
<!--
这是一个
JavaScript
表达式而不是一个字符串。-->
<blog-post
v-bind:comments="{
id:
1,
title:
'My
Journey
with
Vue'
}"></blog-post>
<!--
用一个变量进行动态赋值。-->
<blog-post
v-bind:post="post"></blog-post>
传入一个对象的所有属性
如果你想要将一个对象的所有属性都作为
prop
传入,你可以使用不带参数的
v-bind
(取代
v-bind:prop-name)。例如,对于一个给定的对象
post:
post:
{
id:
1,
title:
'My
Journey
with
Vue'
}
下面的模板:
<blog-post
v-bind="post"></blog-post>
等价于:
<blog-post
v-bind:id="post.id"
v-bind:title="post.title"
></blog-post>
Vue的组件中的props属性单向数据流
所有的
prop都使得其父子prop之间形成了一个单向下行绑定:父级
prop
的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外改变父级组件的状态,从而导致你的应用的数据流向难以理解。
额外的,每次父级组件发生更新时,子组件中所有的
prop
都将会刷新为最新的值。这意味着你不应该在一个子组件内部改变
prop。如果你这样做了,Vue
会在浏览器的控制台中发出警告。
这里有两种常见的试图改变一个
prop
的情形:
这个
prop
用来传递一个初始值;这个子组件接下来希望将其作为一个本地的
prop
数据来使用。在这种情况下,最好定义一个本地的
data
属性并将这个
prop
用作其初始值:
props:
['initialCounter'],
data:
function
()
{
return
{
counter:
this.initialCounter
}
}
这个
prop
以一种原始的值传入且需要进行转换。在这种情况下,最好使用这个
prop
的值来定义一个计算属性:
props:
['size'],
computed:
{
normalizedSize:
function
()
{
return
this.size.trim().toLowerCase()
}
}
注意在
JavaScript
中对象和数组是通过引用传入的,所以对于一个数组或对象类型的
prop
来说,在子组件中改变这个对象或数组本身将会影响到父组件的状态。
Prop
验证
我们可以为组件的
prop
指定需求。如果有一个需求没有被满足,则
Vue
会在浏览器控制台中警告你。这在开发一个会被别人用到的组件时尤其有帮助。
为了定制
prop
的验证方式,你可以为
props
中的值提供一个带有验证需求的对象,而不是一个字符串数组。例如:
Vue.component('my-component',
{
props:
{
//
基础的类型检查
(`null`
匹配任何类型)
propA:
Number,
//
多个可能的类型
propB:
[String,
Number],
//
必填的字符串
propC:
{
type:
String,
required:
true
},
//
带有默认值的数字
propD:
{
type:
Number,
default:
100
},
//
带有默认值的对象
propE:
{
type:
Object,
//
对象或数组且一定会从一个工厂函数返回默认值
default:
function
()
{
return
{
message:
'hello'
}
}
},
//
自定义验证函数
propF:
{
validator:
function
(value)
{
//
这个值必须匹配下列字符串中的一个
return
['success',
'warning',
'danger'].indexOf(value)
!==
-1
}
}
}
})

prop
验证失败的时候,(开发环境构建版本的)
Vue
将会产生一个控制台的警告。
注意那些
prop
会在一个组件实例创建之前进行验证,所以实例的属性
(如
data、computed
等)

default

validator
函数中是不可用的。
类型检查
type
可以是下列原生构造函数中的一个:
String
Number
Boolean
Function
Object
Array
Symbol
额外的,type
还可以是一个自定义的构造函数,并且通过
instanceof
来进行检查确认。例如,给定下列现成的构造函数:
function
Person
(firstName,
lastName)
{
this.firstName
=
firstName
this.lastName
=
lastName
}
你可以使用:
Vue.component('blog-post',
{
props:
{
author:
Person
}
})
来验证
author
prop
的值是否是通过
new
Person
创建的。

Prop
的特性
一个非
prop
特性是指传向一个组件,但是该组件并没有相应
prop
定义的特性。
因为显式定义的
prop
适用于向一个子组件传入信息,然而组件库的作者并不总能预见组件会被用于怎样的场景。这也是为什么组件可以接受任意的特性,而这些特性会被添加到这个组件的根元素上。
例如,想象一下你通过一个
Bootstrap
插件使用了一个第三方的
组件,这个插件需要在其
上用到一个
data-date-picker
特性。我们可以将这个特性添加到你的组件实例上:
<bootstrap-date-input
data-date-picker="activated"></bootstrap-date-input>
然后这个
data-date-picker=”activated”
特性就会自动添加到<bootstrap-date-input>
的根元素上。
替换/合并已有的特性
想象一下
<bootstrap-date-input>
的模板是这样的:
<input
type="date"
class="form-control">
为了给我们的日期选择器插件定制一个主题,我们可能需要像这样添加一个特别的类名:
<bootstrap-date-input
data-date-picker="activated"
class="date-picker-theme-dark"
></bootstrap-date-input>
在这种情况下,我们定义了两个不同的
class
的值:
form-control,这是在组件的模板内设置好的
date-picker-theme-dark,这是从组件的父级传入的
对于绝大多数特性来说,从外部提供给组件的值会替换掉组件内部设置好的值。所以如果传入
type=”text”
就会替换掉
type=”date”
并把它破坏!庆幸的是,class

style
特性会稍微智能一些,即两边的值会被合并起来,从而得到最终的值:form-control
date-picker-theme-dark。
禁用特性继承
如果你不希望组件的根元素继承特性,你可以设置在组件的选项中设置
inheritAttrs:
false。例如:
Vue.component('my-component',
{
inheritAttrs:
false,
//
...
})
这尤其适合配合实例的
$attrs
属性使用,该属性包含了传递给一个组件的特性名和特性值,例如:
{
class:
'username-input',
placeholder:
'Enter
your
username'
}
有了
inheritAttrs:
false

$attrs,你就可以手动决定这些特性会被赋予哪个元素。在撰写基础组件的时候是常会用到的:
Vue.component('base-input',
{
inheritAttrs:
false,
props:
['label',
'value'],
template:
`
<label>
{{
label
}}
<input
v-bind="$attrs"
v-bind:value="value"
v-on:input="$emit('input',
$event.target.value)"
>
</label>
`
})
这个模式允许你在使用基础组件的时候更像是使用原始的
HTML
元素,而不会担心哪个元素是真正的根元素:
<base-input
v-model="username"
class="username-input"
placeholder="Enter
your
username"
></base-input>
总结
以上所述是小编给大家介绍的Vue组件中prop属性使用说明,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
您可能感兴趣的文章:VueJs组件prop验证简单介绍Vue组件选项props实例详解vue父组件通过props如何向子组件传递方法详解详解vue2父组件传递props异步数据到子组件的问题详解vue父子组件间传值(props)Vue2.0利用
v-model
实现组件props双向绑定的优美解决方案

‘贰’ vue js版本更新,但用户的浏览器有缓存之前的vue文件

你的vuejs版本更新难道是直接覆盖服务器文件,而不是

/vue/2.5.13/vue.js

/vue/2.5.12/vue.js

这样分版本存放?赶紧改吧

‘叁’ vue.js中,什么时候用methods什么时候用computed什么时候用watch

computed
以前的名字叫做ready
是在dom加载后马上执行的。

而methods中的函数,则必须要有一定的触发条件。
在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作。模板是为了描述视图的结构。在模板中放入太多的逻辑会让模板过重且难以维护。这就是为什么 Vue.js 将绑定表达式限制为一个表达式。如果需要多于一个表达式的逻辑,应当使用**计算属性**。
Vue实例的computed的属性
<div class="test">
<p>原始的信息{{message}}</p>
<p>计算后的信息{{ComputedMessage}}</p>
</div>

js代码
var myVue = new Vue({
el: ".test",
data: {
message:12
},
computed:{
ComputedMessage:function () {
return this.message+10;
}
}
});

界面会显示 12 和 22
上述的方式是一种缓冲的实现的效果,这种实现的方式依赖于它的缓寸,计算得到的属性只有在相关依赖(message)改变的时候才会重新取值,这就意味着只要message没有发生改变的时候,多次访问ComputedMessage都不会再重新执行计算的这个属性。。

计算后的ComputedMessage属性始终是依赖于message的
通过调用函数实现同样的效果
<div class="test">
<p>原始的信息{{message}}</p>
<p>计算后的信息{{MessageFunction()}}</p>
</div>

js代码
var myVue = new Vue({
el: ".test",
data: {
message:12
},
methods:{
MessageFunction:function () {
return this.message+10;
}
}
});

得到的结果和上面的结果是一样的,但是每次被重新渲染的时候都会被重新调用。
所以使用上述两种方式的时候,首先要确定你是否需要借助缓存
使用vue实例的watch
这个没有看懂呀
但是使用computed这个属性更加的方便和快捷
<div class="test">
<p>原始的信息{{fullName}}</p>
</div>

js代码
var myVue = new Vue({
el: ".test",
data: {
firstName:"fur",
lastName:"bool"
},
computed:{
fullName:function () {
return this.firstName+this.lastName
}
}
});

而且你可以computed属性设置setter getter是默认就有的。

演示set和get的调用过程
<div class="test">
<p>原始的信息{{fullName}}</p>
<button @click="fu">test</button>
</div>

js代码
var myVue = new Vue({
el: ".test",
data: {
firstName:"fur",
lastName:"bool",
fullName:"sasas dsdsd dsds"
},
computed:{
fullName:{
get:function () {
console.log("get")
return this.firstName+this.lastName
},
set:function(value){
var names=value.split(" ");
this.firstName=names[0];
this.lastName=names[names.length-1];
console.log("set");
}
}
},
methods:{
fu:function () {
myVue.fullName="sasas dsdsd dsds";
console.log(myVue.firstName); //sasas
console.log(myVue.lastName); //dsds
}
}
});

首先会输出get;

在点击按钮为fullName赋值的时候首先调用set 再调用get方法。
自定义的Watcher
虽然计算属性在大多数情况下是非常合适的,但是有的时候也需要自定义一个watcher。这是因为你想要在数据变化响应的时候,执行异步操作胡总和其他的操作是非常有用的。

‘肆’ vue 不是路由跳转的页面怎么缓存

vue缓存主要四种方式:

  1. 使用vuex

  2. 存放在cookie中

  3. 存放在localStorage或者sessionStorage中

  4. 存放在路由集合中

‘伍’ 使用vue框架开发,版本更新,怎么解决用户浏览器缓存问题

vue-cli里的默认配置,css和js的名字都加了哈希值,所以新版本css、js和就旧版本的名字是不同的,不会有缓存问题。

不过值得注意的是,把打包好的index.html放到服务器里去的时候,index.html在服务器端可能是有缓存的,这需要在服务器配置不让缓存index.html。

‘陆’ 组件之间来回跳转如何缓存数据

组件的切换与缓存 原创
2021-11-11 21:47:12
2点赞

weixin_58384302

码龄1年

关注
SPA页面是多组件拼起来的,这时候就存在组件之间的切换问题,Vue中也提出了动态组件的概念,使得我们可以更好的实现组件之间的切换效果 , 但是vue中组件的切换实际是组件本身重新创建和销毁的过程,在某些场景下我们并不希望组件被重新创建重新渲染

这里我就主要介绍Vue中组件的切换以及缓存解决方法

一、组件的切换方式
(1) 使用 v-if和v-else或者(v-show)
当里面的istrue为true时,Com1显示,否则就是Com2进行显示

(2) 使用is特性来进行动态组件的切换
(3) 使用路由(router)进行动态组件的切换
二、组件缓存
组件的缓存可以在进行动态组件切换的时候对组件内部数据进行缓存,而不是走销毁流程

使用场景: 多表单切换,对表单内数据进行保存

1.keep-alive定义:
包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。

是一个抽象组件:它自身不会渲染一个 DOM 元素,也不会出现在父组件链中。 当组件在<keep-alive>内被切换,它的activated和 deactivated这两个生命周期钩子函数将会被对应执行 。

2.keep-alive的两个钩子函数
activated deactivated
在 keep-alive 组件激活时调用 在keep-alive 组件停用时调用
该钩子函数在服务器端渲染期间不被调用 该钩子在服务器端渲染期间不被调用
使用keep-alive会将数据保留在内存中,如果要在每次进入页面的时候获取最新的数据,需要在 activated阶段获取数据,承担原来created钩子函数中获取数据的任务。

注意: 只有组件被keep-alive包裹时,这两个生命周期函数才会被调用,如果作为正常组件使用,是不会被调用的

‘柒’ vue视频无法保存11819

摘要 1、先去vue软件"设置"里清除缓存,再保存就好了,不用重启什么的。

‘捌’ vue项目中怎么缓存图片,可以使用<keep-alive></keep-alive>缓存图片吗,轮播图中怎么用

缓存图片是浏览器默认做的事情,你不需要任何操作。你不需要缓存的时候才需要添加一些信息。<keep-alive></keep-alive>是用来缓存路由的,缓存下来的路由再次进入和上次离开时的状态是一样的(不会再次触发created钩子)。

‘玖’ vue 想要返回页面停留在离开页面时的位置,无论用什么方法,是必须要用keep-alive吗

最近项目中由于列表居多且都做了下拉刷新上拉加载,所以就使用了keep-alive组件来缓存页面数据,但是当在其他页面做一些操作改变了列表数据,当来到列表的时候每次都要下拉刷新一下,体验不好,所以就使用到了EventBus,在需要更新的时候就用EventBus来刷新列表。

1.keep-alive组件

keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在页面渲染完毕后不会被渲染成一个DOM元素。但是对于展示型页面比较好用,表单类页面也会将所填数据保存起来,对于那种表单没提交又需要保存所填数据的场景非常实用。

keep-alive所缓存的页面只会执行一次created和mounted,也就是在第一次进入才会执行。但是又会多两个生命周期,分别是activated、deactivated,activated在每次进入执行而deactivated在每次离开前执行。 当然有些页面不需要缓存,就要进行一些处理,这里就不多讲了,因为估计大家都知道(不知道网络去...)。

2.EventBus(事件总线)

EventBus用于实现组件之间的数据通讯,使用起来非常之简单。只需要在main.js中加入以下代码:

Vue.prototype.$eventBus = new Vue();

上面代码就创建了一个全局EventBus,其实就是一个vue实例。

这样我们就可以在各个页面中使用了。

在页面中使用 $emit 方法就可以触发事件,然后组件中使用 $on 方法就可以监听对应事件,这个和组件之间传值是一样的。不过这个可以在非父子组件中传递状态,和vuex差不多。当然这种方法在简单应用中可以使用,复杂的应用应该使用 vuex ,这样方便管理和维护。
this.$eventBus.$emit('msg',data);// 触发事件 this.$eventBus.$on('msg',(data)=>{}) // 监听事件
3.组合使用

这两个我感觉很配,当我们使用keep-alive缓存了页面组件,我们需要在A面来触发B页面的列表刷新或其他方法时,这时候使用EventBus就非常方便,其他方法也可以,比如说使用vuex,但是此时就没有直接使用EventBus方便快捷了。 当我们在页面中使用了 this.$eventBus.$on 去监听一个事件,只要页面被缓存,就可以监听到其他页面触发的事件。这样我们就可以减少一些不必要的请求,而且在需要更新的时候去更新,也可以做一些其他的操作,简直美滋滋。

总结

以上所述是小编给大家介绍的vue的keep-alive中使用EventBus的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
您可能感兴趣的文章:基于vue中keep-alive缓存问题的解决方法详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)vue中keep-alive的用法及问题描述解决vue单页使用keep-alive页面返回不刷新的问题vue2中的keep-alive使用总结及注意事项vue项目优化之通过keep-alive数据缓存的方法vue使用keep-alive实现数据缓存不刷新Vue keep-alive实践总结(推荐)深入理解vue-router之keep-alive

‘拾’ 使用VUE开发的项目怎么解决SEO问题最好

使用Vue,是js加载后台数据的,动态赋值在元素上的,搜索引擎只能抓取html内容并不能执行JS,这样搜索引擎抓取不到数据。
解决方法:1、使用CDN缓存静态文件;2、使用服务端对SEO部分进行动态赋值;3、prerender-spa-plugin预渲染插件