超全面的vue.js使用总结


Posted in Javascript onFebruary 12, 2017

一、Vue.js组件

vue.js构建组件使用

Vue.component('componentName',{ /*component*/ });

这里注意一点,组件要先注册再使用,也就是说:

Vue.component('mine',{
  template:'#mineTpl',
  props:['name','title','city','content']
 });

 var v=new Vue({
 el:'#vueInstance',
 data:{
  name:'zhang',
  title:'this is title',
  city:'Beijing',
  content:'these are some desc about Blog'
 }
});

如果反过来会报错,因为反过来代表先使用了组件的,但是组件却没注册。

webpack报错后,使用webpack --display-error-details可以排错

二、指令keep-alive

在看demo的时候看到在vue-router写着keep-alivekeep-alive的含义:

如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新渲染。为此可以添加一个keep-alive指令

<component :is='curremtView' keep-alive></component>

三、如何让css只在当前组件中起作用

在每一个vue组件中都可以定义各自的css,js,如果希望组件内写的css只对当前组件起作用,只需要在style中写入scoped,即:

<style scoped></style>

四、vuejs循环插入图片

在写循环的时候,写入如下代码:

<div class="bio-slide" v-for="item in items"> 
 <img src="{{item.image}}">
</div>

此时在控制台会出现警告
[Vue Warn]: src="{{item.image}}": interpolation in "src" attribute will cause a 404 request. Use v-bind:src instead.这里意思是在“src”属性插值将导致404请求。使用v-bind:src代替。

所以替换成如下:

<div class="bio-slide" v-for="item in items"> 
 <img v-bind:src="item.image">
</div>

这里需要主要,v-bind在写的时候不能再用{{}},根据官方的说法:

<a v-bind:href="url" rel="external nofollow" ></a>

这里 href 是参数,它告诉 v-bind 指令将元素的 href 特性跟表达式 url 的值绑定。可能你已注意到可以用特性插值href="{{url}}" rel="external nofollow" 获得同样的结果:这样没错,并且实际上在内部特性插值会转为 v-bind 绑定。

五、绑定value到Vue实例的一个动态属性上

对于单选按钮,勾选框及选择框选项,v-model绑定的value通常是静态字符串(对于勾选框是逻辑值):

<!-- `toggle` 为 true 或 false -->
<input type="checkbox" v-model="toggle">

但是有时候想绑定value到vue实例的一个动态属性上,这时可以用v-bind实现,并且这个属性的值可以不是字符串。例如绑定Checkbox的value到vue实例的一个动态属性:

<input 
 type="checkbox"
 v-model="toggle"
 v-bind:true-value="a"
 v-bind:false-value="b">
<p>{{toggle}}</p>

这里绑定后,并不是说就可以点击后由true,false的切换变为a,b的切换,因为这里定义的动态a,b是scope上的a,b,并不能直接显示出来,此时

//当选中时
vm.toggle === vm.a
//当没选中时
vm.toggle === vm.b

所以此时需要在data中定义a,b,即:

new Vue({
 el:'...',
 data:{
 a:'a',
 b:'b' 
 }
});

六、片段实例

下面几种情况会让实例变成一个片断实例:

  1. 模板包含多个顶级元素。
  2. 模板只包含普通文本。
  3. 模板只包含其它组件(其它组件可能是一个片段实例)。
  4. 模板只包含一个元素指令,如<partial> 或 vue-router 的 <router-view>
  5. 模板根节点有一个流程控制指令,如 v-ifv-for

这些情况让实例有未知数量的顶级元素,它将把它的 DOM 内容当作片断。片断实例仍然会正确地渲染内容。不过,它没有一个根节点,它的$el 指向一个锚节点,即一个空的文本节点(在开发模式下是一个注释节点)。

但是更重要的是,组件元素上的非流程控制指令,非 prop 特性和过渡将被忽略,因为没有根元素供绑定:

<!-- 不可以,因为没有根元素 -->
<example v-show="ok" transition="fade"></example>
 
<!-- props 可以 -->
<example :prop="someData"></example>
 
<!-- 流程控制可以,但是不能有过渡 -->
<example v-if="ok"></example>

片段实例也有用处,但是通常情况下组件有一个根节点比较好,它会保证组件元素上的指令和特性能正确的转换,同时性能也稍微好些。

七、路由嵌套

路由嵌套会将其他组件渲染到该组件内,而不是进行整个页面跳转router-view本身就是将组件渲染到该位置,想要进行页面跳转,就要将页面渲染到根组件,在起始配置路由时候写到:

var App = Vue.extend({ root });
router.start(App,'#app');

这里首先将根组件注册进来,用于将路由中配置好的各个页面渲染出来,然后将根组件挂载到与#app匹配的元素上。

八、实现多个根据不同条件显示不同文字的方法

v-if,v-else可以实现条件选择,但是如果是多个连续的条件选择,则需要用到计算属性computed。例如实现当输入框中什么都没写的时候显示字符串‘empty',否则显示输入框中的内容,代码如下:

<div id="test">
 <input type="text" v-model="inputValue">
 <h1>{{changeVaule}}</h1>
</div>
new Vue({
 el:'#test',
 data:{
 changeVaule:'123'
 },
 computed :{
 changeVaule:function(){
  if(this.inputValue!==''){
  return this.inputValue;
  }else{
  return 'empty';
  }
 }
 }
});

九、Vuejs在变化检测问题

1.检测数组

由于javascript的限制,vuejs不能检测到下面数组的变化:

直接索引设置元素,如vm.item[0]={};

修改数据的长度,如vm.item.length

为了解决问题1,Vuejs扩展了观察数组,为它添加一个$set()方法:

// 与 `example1.items[0] = ...` 相同,但是能触发视图更新
example1.items.$set(0, { childMsg: 'Changed!'})

问题2,需要一个空数组替换items。

除了$set() ,vuejs也为观察数组添加了$remove()方法,用于从目标数组中查找并删除元素,在内部调用了splice()

因此,不必:

var index = this.items.indexOf(item)
if (index !== -1) {
 this.items.splice(index, 1)
}

只需:

this.items.$remove(item);

2.检测对象

受ES5的显示,Vuejs不能检测到对象属性的添加或删除。因为Vuejs在初始化时候将属性转化为getter/setter,所以属性必须在data对象才能让Vuejs转换它,才能让它是响应的,例如:

var data = { a: 1 }
var vm = new Vue({
 data: data
})
// `vm.a` 和 `data.a` 现在是响应的
 
vm.b = 2
// `vm.b` 不是响应的
 
data.b = 2
// `data.b` 不是响应的

不过,有办法在实例创建之后添加属性并且让它是响应的。对于Vue实例,可以使用$set(key,value)实例方法:

vm.$set('b', 2)
// `vm.b` 和 `data.b` 现在是响应的

对于普通数据对象,可以使用全局方法Vue.set(object, key, value) :

Vue.set(data, 'c', 3)
// `vm.c` 和 `data.c` 现在是响应的

有时你想向已有对象上添加一些属性,例如使用 Object.assign() _.extend() 添加属性。但是,添加到对象上的新属性不会触发更新。这时可以创建一个新的对象,包含原对象的属性和新的属性:

// 不使用 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

十、关于vuejs页面闪烁{{message}}

在vuejs指令中有v-cloak,这个指令保持在元素上直到关联实例结束编译。和CSS规则如[v-cloak]{display:none}一起用时,这个指令可以隐藏未编译的Mustache标签直到实例准备完毕。

用法如下:

[v-cloak]{
 display:none;
}
<div v-cloak>{{message}}</div>

这样<div>不会显示,直到编译结束

十一、关于在v-for循环时候v-model的使用

有时候需要循环生成input,用v-model绑定后,利用vuejs操作它,此时我们可以在v-model中写一个数组selected[$index] ,这样就可以给不同的input绑定不同的v-model,从而分别操作他们。这个我在demo中的dataBind.vue中用到。

十二、vuejs中过渡动画

在vuejs中,css定义动画:

.zoom-transition{
  width:60%;
  height:auto;
  position: absolute;
  left:50%;
  top:50%;
  transform: translate(-50%,-50%);
  -webkit-transition: all .3s ease;
  transition: all .3s ease;
 }
 .zoom-enter, .zoom-leave{
  width:150px;
  height:auto;
  position: absolute;
  left:20px;
  top:20px;
  transform: translate(0,0);
 }

其中动画在定的时候要注意上下对应,上面有什么,下面有什么,都要变化的,如果有不变化的,应该抽离出去,作为公共css样式,在上面的css中,如果我只写 transform: translate(-50%,-50%);而不写下面的transform: translate(0,0);则会导致上面的transform: translate(-50%,-50%);被添加到下面,认为这个是不变的。

十三、指令v-el的使用

有时候我们想就像使用jquery那样去访问一个元素,此时就可以使用v-el指令,去给这个元素注册一个索引,方便通过所属实例的$el访问这个元素。

注意

HTML不区分大小写,所以v-el:someEl将转换为全小写。可以用v-el:some-el然后设置this.$el.someEl

示例

<span v-el:msg>hello</span>
<span v-el:other-msg>world</span>
this.$els.msg.textContent // -> "hello"
this.$els.otherMsg.textContent // -> "world"
this.$els.msg //-><span>hello</span>

十四、关于vuejs中使用事件名

在vuejs中,我们经常要绑定一些事件,有时候给DOM元素绑定,有时候给组件绑定。绑定事件在HTML中用v-on:click-"event" ,这时evet的名字不要出现大写,因为在1.x中不区分大小写,所以如果我们在HTML写v-on:click="myEvent"而在js中写myEvent就出错误,所以在vuejs的1.x绑定事件时候,要尽量避免使用大写字母。在2.0中没有该限制!

十五、v-if与v-show的区别

v-if直接不渲染这个DOM元素,而v-show是会渲染DOM元素,只是使用display:none隐藏,打开开发者工具可以看到该DOM

十六、关于transition全局钩子如何在组件中使用

Vue.transition是定义一个全局transition钩子的,如果想针对组件定义,则需要如下写法:

export default{
 transition:{
  'fade':{
   enter() {},
   leave() {}
  }
 }
}

这样fade这个过度钩子只会作用于组件内,如果同时有同名的全局钩子,则会优先使用组建定义的

十七、利用vue-router如何实现组件在渲染出来前执行某个事件

export default{
 data(){
  return{
   selected:0,
   currentView:'view_0'
  }
 },
 methods:{
  choose(index) {
   this.selected=index;
   this.currentView='view_'+index;
  }
 },
 route:{
  data() {
   /*每次切换路由,在渲染出页面前都会执行*/
  }
 }
}

总结

以上就是关于vue.js使用总结的全部内容了,希望本文的内容对大家学习或者使用vue.js能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
各种效果的jquery ui(接口)介绍
Sep 17 Javascript
JavaScript数据类型检测代码分享
Jan 26 Javascript
JS设置网页图片vspace和hspace属性的方法
Apr 01 Javascript
JavaScript汉诺塔问题解决方法
Apr 21 Javascript
js检测用户输入密码强度
Oct 22 Javascript
JavaScript学习笔记之数组随机排序
Mar 23 Javascript
Highcharts学习之数据列
Aug 03 Javascript
Next.js项目实战踩坑指南(笔记)
Nov 29 Javascript
layui 实现自动选择radio单选框(checked)的方法
Sep 03 Javascript
你准备好迎接vue3.0了吗
Apr 28 Javascript
vue 实现setInterval 创建和销毁实例
Jul 21 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
Nov 16 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 #Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
Feb 11 #Javascript
详解Jquery EasyUI tree 的异步加载(遍历指定文件夹,根据文件夹内的文件生成tree)
Feb 11 #Javascript
JavaScript实现瀑布流以及加载效果
Feb 11 #Javascript
JavaScript表单验证的两种实现方法
Feb 11 #Javascript
jQuery实现复制到粘贴板功能
Feb 11 #Javascript
js实现PC端和移动端刮卡效果
Mar 27 #Javascript
You might like
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
Thinkphp实现短信验证注册功能
2016/10/18 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
一段实时更新的时间代码
2006/07/07 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
javascript删除option选项的多种方法总结
2013/11/22 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(一)
2017/01/21 Javascript
nodejs个人博客开发第一步 准备工作
2017/04/12 NodeJs
基于Vue实现timepicker
2017/04/25 Javascript
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
2019/04/14 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
2020/04/17 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
详解详解Python中writelines()方法的使用
2015/05/25 Python
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python算法应用实战之栈详解
2017/02/04 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
python文件选择对话框的操作方法
2019/06/27 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
python 19个值得学习的编程技巧
2020/08/15 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
python压包的概念及实例详解
2021/02/17 Python
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
音乐学院硕士生的自我评价分享
2013/11/01 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
Python使用openpyxl批量处理数据
2021/06/23 Python
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers