web前端框架之vue---知识点

在vue中可以使用插值表达式{{}}:表达式中的值可以为:对象,字符串、判断后的布尔值、三元表达式

v-model实现双向绑定  只适用于有value属性标签  比如input标签

v-bind后可以跟标签的属性和自定义属性  比如<input type='text' v-bind:value='msg' /> ,可以简写,将v-bind省略:<input type='text' :value='msg' /> 

v-on后跟事件名称,如:v-on:click='change',可以简写,将v-on省略::click='change'

在2.2.0+的版本中,当在组件中使用v-for时,绑定key是必须的,而且key绑定的数据只能是***字符串或数字***

 

事件修饰符:

.stop:阻止冒泡

.prevent:阻止默认事件 比如:<a href="https://www.baidu.com @click.prevent='link'>阻止默认跳转百度</a> //如果时间方法后面有()表示要在方法里传参数,如:@click.prevent='link(id)'

.capture:添加事件侦听器时使用事件捕获模式,比如下面的stop修饰符示例中在外层div标签上对click事件做@click.capture后,那么事件的执行顺序为先执行div点击事件,然后再执行按钮执行事件

.self:只当事件在该元素本身(比如不是子元素)触发时触发回调。

#self修饰符示例:表示只有点击外层div元素的时候才会触发事件,如果点击按钮的话,不会触发div事件。
<div @click.self='divHandler'>
      <input type='button' @click='btnHandler' value='按钮' /> 
  </div>

.once:事件只触发一次。比如<a href="https://www.baidu.com @click.prevent.once='link'> //表示只对当前click.prevent事件只触发一次,下次点击将跳转
比如阻止事件冒泡,使用stop事件修饰符。示例如下:

<div @click='divHandler'>
   <input type='button' @click.stop='btnHandler' value='按钮' /> //使用stop修饰符后,当点击按钮时,只响应了按钮点击事件,而div点击事件就不会触发。
</div>

注意:stop和self区别:self只会阻止自己身上的冒泡行为,并不会真正阻止冒泡行为,比如按钮事件外层有两层div,里面一层div添加了self修饰符,这样在点击按钮的事件时候,
   先触发按钮事件,后触发最外层div事件,而里面一层添加self修饰符的div没有触发事件。
   如果只对按钮添加点击事件的stop修饰符,情况为外面两层div事件都将被阻止掉,实现阻止冒泡行为。

 

在监听键盘事件时,Vue允许为v-on在监听键盘事件时添加关键修饰符。比如<input @keyup.enter='add' /> //表示在点击enter键后触发add事件
vue自身提供的按键修饰符:

.enter
.tab
.delete
.esc
.space
.up
.down
.left
.right

至于vue以外的按键修饰符,需要自定义,自定义方式为根据键盘码来配置按键修饰符。比如自定义一个F2键的按键修饰符为:Vue.config.keyCodes.F2 = 113
要想自定义按键修饰符,就需要知道各个键盘码对应的值,参考文章 js里键盘事件对应的键码:http://www.cnblogs.com/wuhua1/p/6686237.html

 

解决插值表达式在网络速度慢时页面加载出现闪烁的问题:

在使用插值表达式的标签内添加v-cloak属性,如<p v-cloak>{{ msg }} </p>,并使用style让具有v-cloak属性的标签隐藏<style>[v-cloak]{display:none}</style>。
这样在慢速慢的时候页面显示的时候就不会出现{{msg}}的源代码显示。一般使用v-text或v-html指令就避免闪烁问题,但标签中的内容将被覆盖掉。

 

自定义指令,比如定义一个获取文本框焦点的指令:

Vue.directive('focus',{
  //当指令绑定到元素上的时候,会立即执行这个bind函数,只执行一次
  bind:function(el){} //这里的el是dom元素,所以可以直接对dom元素进行操作
  //当元素插入到DOM中的时候,会执行inserted函数,只执行一次
  inserted: function(el){ el.focus() }
  //当VNode更新的时候,会执行updated,可能会触发多次
  updated: function(el){}
})

自定义好指令后,就可以在标签中使用这个指令了,使用的时要在指定名的前面加上v- 比如给input标签在页面加载后获取焦点<input type='text' v-focus />

 

动画效果transition:

是Vue官方提供的元素,作用为将需要实现控制动画的元素包裹起来,从而事项被包裹元素动画显示。然后设置进场、离场、过度阶段样式即可。如果不想用v-前缀来定义动画样式,可以在transiton元素中设置name属性的值为自定义前缀名还可以配合animate.css提供的样式来提供被包裹元素的动画。

<transition enter-active-class="bounceIn" leave-active-class="bounceOut"> 
     <h3 v-if='flag' class='animated'>这是个动画</h3>
</transition>

如果要对v-for循环的元素做动画渲染的话,需要用transition-group对v-for循环的元素做包裹处理。

 

如果一个标签使用多个class样式,可以在此标签中对class属性做v-bind绑定,然后对class属性的值传递数组或对象

1、直接传递一个数组  <h1 :class="['red','thin']">class样式</h1>
2、在传递的数组中使用三元表达式:<h1 :class="['red','thin',flag?'active':'']">class样式</h1> //读data数据中变量flag判断是否为true来使用active样式
3、在数组中嵌套对象:<h1 :class="['red','thin',{'active':flag}]">class样式</h1>
4、直接传递一个对象:<h1 :class="{red:true,thin:true,active:true}">class样式</h1>

 

父组件向子组件传递数据:通过父组件对子组件绑定自定义属性,然后在子组件中通过props:['父组件绑定的自定义属性名']属性调用自定义属性即可
子组件向父组件传递数据:通过在子组件中定义一个事件,然后在子组件定义的事件中通过this.$emit(父组件定义的事件名,传递的数据)来触发父组件定义的事件。

 

watch和computed:watch监控的是单个属性的变化,而computed可以监控多个属性的变化

 

<keep-alive> <app/> </keep-alive>:在app组件切换的过程中将状态保持在内存中,防止重新渲染DOM

 

npm install vue-router --save
$route:保存路由信息对象,挂载到vue实例化对象中,在容器中使用this.$route来查看路由信息
$router:挂载到vue实例化对象中,在容器中使用this.$router,主要用来做路由导航,比如页面的跳转、页面的向前或向后等操作。。。

 

发起ajax请求可以使用axios或vue-resource
npm install axios --save

 

如果需要在一个路由定义下展示多个组件的话,这时候需要使用命名视图方式,比如在实现一个经典布局(有header sidebox contendbox),首先定义这三个组件,
然后定义路由方式:routes:[{path:'/',components:{'default':header,'side':sidebox,'conten':contendbox}}],然后设置命名视图<router-view></router-view><router-view name='side'></router-view><router-view name='content'></router-view>,最后对这三个组件的内容设置样式即可。

 

posted @ 2019-03-11 21:28  goser  阅读(147)  评论(0)    收藏  举报