Vue学习笔记(1)vue基础

vue入门

Vue概述

Vue:渐进式JavaScript框架

声明式渲染->组件系统->客户端路由->集中式状态管理->项目构建

  • 易用
  • 灵活
  • 高效

Vue基本使用

原生js->jquery->框架

<div id="app">
    {
  {msg}}
</div>
<script>
    var vm=new Vue({
    
        el:'#app',
        data:{
    
            msg:'Hello Vue'
        }
    })
</script>

el:元素的挂载位置

data:模型数据

{ {}}:差值表达式

原理分析:Vue语法–(Vue框架)->原生语法

Vue模板概述

前端渲染?

把数据填充到HTML标签中

  • 原生js拼接字符串(复杂,后期维护困难)
  • 使用前端模板引擎(没有事件机制)
  • 使用vue特有的模板语法

语法概述

  • 差值表达式

  • 指令(v-)

  • 事件绑定

  • 属性绑定

  • 样式绑定

  • 分支循环结构

指令

指令本质就是自定义属性

v-cloak

解决问题:闪动

原理:先隐藏,替换好值之后再显示最终的值

<style>
    [v-clock] {
    
        display: none;
    }
</style>
<div v-cloak>{
  {msg}}</div>
v-text

相比差值表达式更加简洁,没有”闪动“问题

<div v-text="msg"></div>
 msg: 'Hello Vue',
v-html
<div v-html="msg1"></div>
msg1:'<h1>Hello Vue</h1>'

比较危险,可能会导致xxs(跨站脚本危机),本网站内部数据可以使用

v-pre
<div v-pre>{
  {msg}}</div>

显示原始信息

数据响应式

数据变化导致页面内容的变化

  • v-once只编译一次,再次更改数据不会变化,提高性能
<div v-once>{
  {msg}}</div>

双向数据绑定

<div>{
  {msg}}</div>
<label>
    <input type="text" v-model="msg"/>
</label>

结果:数据同步

页面内容影响数据,数据在影响页面内容

MVVM设计思想

M(model)

V(view)

VM(View-Model)

Vue模板语法

事件绑定

v-on指令 or @

绑定函数名称

<div id="app">
<div v-cloak>{
  {msg}}</div>
<button v-on:click="msg++">点击</button>
<button @click="msg++">点击</button>
</div>
<script>
    var vm = new Vue({
    
        el: '#app',
        data: {
    
            msg: 0
        }
    })
</script>

绑定函数调用

 <button @click="handle(1,2,$event)">点击3</button>
<button @click="handle1">点击4</button>
var vm = new Vue({
    el: '#app',
    data: {
        msg: 0,
    },
    methods:{
        handle:function (p,p1,event){
                console.log(event.target.innerHTML);
                this.msg++;
            },
            handle1:function (event){
                console.log(event.target.innerHTML);
            }
    }
})
  • 如果时间直接绑定函数名称,那么默认会传递事件对象作为事件函数的第一个参数

  • 如果事件绑定函数调用,那么时间对象必须作为最后一个参数显示传递,并且事件对象的名称必须是$event

事件修饰符

  • 阻止冒泡
<div v-text="msg"></div>
<div v-on:click="handle1" >
<button @click="handle">按钮</button>
 </div>
methods:{
  handle:function (event) {
      event.stopPropagation();
  },
    handle1:function (){
      this.msg++;
    }
}

或者直接使用修饰符

<button @click.stop="handle">按钮</button>
  • 阻止默认行为
<button @click.prevent="handle">按钮</button>

或者直接使用修饰符

<a href="http://www.baidu.com" v-on:click.prevent>百度</a>

按键修饰符

submit:function (){
  console.log(this.username+"    "+this.password);
},
deleteAll:function (){
  this.username='';
}
  • enter回车键(示例:提交)
  <input type="text" v-model="password" v-on:keyup.enter="submit">
  • delete删除键(示例:删除全部)
<input type="text" v-model="username" v-on:keyup.delete="deleteAll">

Vue自定义按键修饰符

<input type="text" v-on:keyup.65="custom">

或者

<input type="text" v-on:keyup.a="custom">
  Vue.config.keyCodes.a=65;

简答计算器

<div id="app">
    <h1>简单计算器</h1>
    数值A:<input type="text" v-model=numberA>
    <br/>
    数值B:<input type="text" v-model=numberB>
    <br/>
    <button @click="calculate">计算</button>
    <br/>
    计算结果:{
  {result}}
</div>
<script>
    var v=new Vue({
    
        el:'#app',
        data:{
    
            numberA:'',
            numberB:'',
            result:''
        },
        methods:{
    
            calculate:function (){
    
                this.result=parseInt(this.numberA)+parseInt(this.numberB);
            }
        }
    })
</script>

属性绑定

<a v-bind:href="url">百度</a>
<script>
    var v=new Vue({
    
        el:'#app',
        data:{
    
            url:"http://www.baidu.com"
        }
    })
</script>

样式绑定

class样式处理
.active{
    border: 1px solid red;
    width: 100px;
    height: 100px;
}
  • 对象语法
<div v-bind:class="{active:isActive}"></div>
        data:{
            isActive:true
        },methods:{
            handle:function (){
                this.isActive=!this.isActive;
            }
        }
  • 数组语法
<button v-on:click="handle">按钮</button>
<div v-bind:class="[activeClass,errorClass]"></div>
data: {
    activeClass: "active",
    errorClass: "error"
}, methods: {
    handle:function () {
        this.activeClass="";
    }
}
  • 数组和对象结合使用
<div v-bind:class="[activeClass,errorClass,{test:isTest}]"></div>
  • class绑定的值可以简化操作
<div v-bind:class="combineClass"></div>
data: {
    activeClass: "active",
    errorClass: "error",
    combineClass:["active","error"]
}

或者

<div v-bind:class="objClass"></div>
objClass:{
    active:true,
    error:true
}
  • 默认的class会保留
style样式处理
  • 对象
<div v-bind:style="{
      border:borderStyle,width:widthStyle,height:heightStyle}"></div>
data: {
    borderStyle:"1px solid blue",
    widthStyle:"100px",
    heightStyle:"100px",
}
  • 数组
<div v-bind:style='[objStyles,overrideStyle]'></div>
            objStyles:{
   
              border:'1px solid green',
              width:'200px',
              height: '100px'
            },
            overrideStyle:{
   
                backgroundColor:"red"
            }

分支循环结构

<div v-if="score>=90">优秀</div>
<div v-else-if="score<90&&score>=80">良好</div>
<div v-else-if="score<80&&score>=60">及格</div>
<div v-else>不及格</div>
<div v-show="flag">测试flag</div>
  • v-if和v-show的区别

v-if控制元素是否渲染到页面

v-show控制元素是否显示

循环结构

<ul>
    <li v-for="(item,index) in color">{
  {item}}{
  {index}}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小赵OvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值