vue基础语法学习

vue基础语法

vue与react相似之处:以数据驱动视图的前端框架,改变数据,页面视图同时发生改变。

v-if与v-show的区别:

<template v-if="loginType == 'username'">    
    <label>用户名label>
template>
<template v-if="loginType == 'email'">
    <label>邮箱label>
template>

<!-==================->
<h1 v-show="ok">helloh1>  

v-show的元素会始终渲染并保持在dom中,v-show是简单的切换元素的display属性;
v-if 的元素则根据if的条件判断语句来选择渲染在dom中,当条件语句为true时添加到dom中,否则移除


v-for

用v-for指令根据一组数组的选项列表进行循环渲染

<ul id="example">
    <li v-for="item in array">{{item.title}}</li>
</ul>

var vm=new Vue({
    el: '#example',
    data: {
        array: [
            {
                title:'first'
            },
            {
                title:'second'
            }
        ]
    }
});

渲染结果:

first
second

利用v-for迭代一个对象的属性

    "repeat-object" class="demo">
  • "value in object"> {{ value }}
new Vue({ el: '#repeat-object', data: { object: { FirstName: 'John', LastName: 'Doe', Age: 30 } } })

结果如下:

John
Doe
30

组件和v-for

在自定义的组件中,可以像普通元素一样使用v-for,但是不能直接传递数据到子组件中,因为组件有自己独立的作用域,需要用props传递:

<my-component v-for="(item,index) in items" v-bind:data="item" v-bind:index="index"></my-component>

数组的变异方法(会改变原始数组):

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()
  • sort()
  • reverse()

非变异方法(不会改变原始数组)

  • filter()
  • concat()
  • slice()

这些非变异方法不会改变原始数组,但是总是会返回一个新的数组

注意事项:
由于javascript的限制,vue不能检测以下变动的数组:

  1. 当利用索引直接设置一个项时,如:vm.items[indexOfItem] = newValue
  2. 当修改数组的长度时,如:vm.items.length = newLength;

避免第一种情况:以下两种方式将达到效果,同时触发状态更新:


Vue.set(example1.items,indexOfItem, newValue);

example1.items.splice(indexOfItem,1,newValue);

避免第二种情况:

example1.items.splice(newLength);

事件修饰符:在事件处理程序中调用event.preventDefault()或者event.stopPropagate()
- .stop
- .prevent
- .capture
- .self
- .once

<a @click.stop="doThis">a>    
<form v-on:submit.prevent="onSubmit">form>  
<a v-on:click.stop.prevent="doThat">a>   
<form v-on:submit.prevent>form>      
<div v-on:click.capture="doThis">...div>    
<div v-on:click.self="doThat">...div>  

你可能感兴趣的:(vue学习)