小白入门 Vue.js (一)—— 附详细实例代码

Vue.js 入门(一)——

Vue.js 的概述

Vue.js 是一款轻量级的以数据驱动的渐进式JavaScript框架
Vue.js 数据驱动的原理在于View层的视图发生改变时,Vue会通过DOM Listeners来监听并改变Model层的数据。反之,当Model层的数据发生改变时,也会通过Data Bingings来监听并改变View层的展示,从而实现双向数据绑定的功能。
例如:jQuery通过操作DOM来改变页面的显示,而Vue通过操作数据实现页面的更新与展示。

MVVW概念

MVVW 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View和ViewModel的双向数据绑定,这使得ViewModel的状态改变可以自动传递给View, 即所谓的数据双向绑定
Vue.js 就是一个提供了MVVW风格的双向绑定的javascript库,专注于View层。它的核心是MVVW中的VM,就是ViewModel。ViewModel负责连接View和Model,保证视图和数据的一致性。

起步

下载vue并使用

<script src="https://unpkg.com/vue/dist/vue.js">

官网首先强调,Vue.js 的核心是一个允许你用简洁的模板语法来声明式的将数据渲染进DOM的系统


简单的htm结构,id 是 app

<div id = "app">
    {{ message }}
</div>

声明vue对象
引入了 vue.js ,vue 会被注册为一个全局变量。在实例化 Vue 时,需要传入一个选项对象,它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。

var app = new Vue ( { 
    el : " #app " ,
    data : {
            message : "Hello Ankry"
    }
} ) ;
  • el : Vue 需要操作的元素节点
  • data : 每个Vue实例都会代理其对象里所有的属性。注意只有这些被代理的属性是响应的,如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。

现在数据和 DOM 已经绑定在一起,所有的元素都是响应式的。在浏览器控制台修改 app, message,页面会相应更新

在这里插入图片描述


Vue 常用指令

指令带有前缀 v- , 以表示它们是 Vue.js 提供的特殊属性

1. v-text ( 更新元素的文本内容 )

  • v-text 指令的作用是:设置标签的内容(textContent)
  • 默认写法会替换全部内容,使用差值表达式可以替换指定内容
<span v-text="message"></span> 
<span> {{message}} </span>  // 两句效果相同
<h2> {{message+"!!"}} </h2>

2. v-html ( 更新元素的innerHTML )

  • 注意内容按普通HTML插入,不会作为Vue模板进行编译
  • 如果是HTML结构,则会被解析为标签
  • v-text 指令无论内容是什么,只会解析为文本

<body>

    <!-- html 结构 -->
        <div id="app">
            <h2 v-html="message"></h2>
            <h2> {{message}} </h2>       // 形成对比
        </div>
        
    <script type="text/javascript">
    
        /* 创建Vue实例 */
        var app = new Vue({
            el:"#app",
            data:{
                message:"<a href='#'>Vue.js</a>",
            }
        });
        
    </script>
</body>


在这里插入图片描述


3. v-on基础

  • v-on 指令的作用:为元素绑定事件
  • 事件名不需要写 on
<div id="app">
<input type="button" value="事件绑定" v-on:click="方法">
            <input type="button" value="事件绑定" v-on:mouseenter="方法">
            <input type="button" value="事件绑定" @dblclick="方法">   //简写
</div>
 var app = new Vue({
            el:"#app",
           methods:{
                方法:function(){
                    //逻辑
                }
            }
 });

举个例子:

<button v-on:click="btn">BUTTON</button>
var app = new Vue ({
      el:"#app",
      data:{
           message:"我是一个message",
       },
           methods:{
           btn:function(){
           alert('点我干嘛')
        }
    }
});

下面做一个实例
我们看一下这个实例的结构
两个button,中间一个span
点击左右button,中间的num会减小、增大

在这里插入图片描述

<div class="input-num">
            <button @click="sub">-</button>
            <span> {{num}} </span>
            <button @click="add">+</button>
</div>
    <script type="text/javascript">
            var app = new Vue({
                el:"#app",
                data:{
                    num:1
                },
                methods:{
                    sub:function(){
                        if (this.num > 0){
                            this.num--;
                        }else{
                            alert('我是有底线的');
                        }
                    },
                    add:function(){
                        if (this.num < 10){
                            this.num++;
                        }else{
                            alert('我已经到顶啦');
                        }
                    }
                }
            });
    </script>

tips

  • 创建Vue实例时,el (挂载点)data (数据)methods (方法)
  • v-on 的作用是绑定事件,简写为 @
  • 方法中通过 this,关键字获取 date 中的数据
  • v-text指令的作用是:设置元素的 文本值,简写为 {{}}

4. v-show

  • v-show:根据表达式的真假,切换元素的显示和隐藏
  • 原理是修改元素的display, 实现显示隐藏
  • v-show 指令后的内容,会被解析为布尔值
  • 值为true元素显示,值为false元素隐藏
<body>
    <!-- html 结构 -->
    <div id="app">
        <button @click="changeIsShow">切换显示状态</button>
        <button @click="addAge">增加年龄</button>
        <img src="images/pic03.png" alt="" v-show="isShow"  width="200" height="200">
        <img src="images/pic04.png" alt="" v-show="age>=18" width="200" height="200">
        // v-show 指令后的内容,会被解析为**布尔值**
    </div>

    <script type="text/javascript">
            var app = new Vue({
                el:"#app",
                data:{
                    isShow:true,
                    age:16
                },
                methods : {
                    changeIsShow:function ( ) { 
                        this.isShow = !this.isShow; // 改变状态
                     },
                     addAge:function ( ) {
                         this.age++;
                     }

                }
            });
    </script>
</body>

5. v-if

  • v-if = "表达式"
  • 根据表达值的真假,切换元素的显示和隐藏
  • 本质是 操作DOM元素 来切换显示状态

与 v-show 的区别
v-show : 自始至终都在,true / false 改变的是 display : block / none ; (操纵样式)
v-if : false 的时候,直接移除不存在了,该便签不会被渲染出来;(操纵DOM树)
如果频繁切换,需要用 v-show , 因为频繁操作DOM元素,对性能消耗比较大

6. v-bind

  • 设置元素的属性 (比如:src , title , class)
  • 完整写法:v-bind:属性名
  • 简写直接省略v-bind,只保留 : 属性名
  • 应用:class 来改变属性样式

    <style type="text/css">
        #box1{
            width: 100px;
            height: 100px;
            border: 1px solid #000;
        }
        .blue{
            background-color:skyblue;
        }
    </style>
</head>
<body>
    <!-- html 结构 -->
    <div id="app">
        <div id="box1" :class="isBlue?'':'blue'"></div>
        <button @click="toggleColor">改变颜色</button>
    </div>
    <script type="text/javascript">
            var app = new Vue({
                el:"#app",
                data:{
                    isBlue:false
                }, 
                methods:{
                    toggleColor:function(){
                        this.isBlue =! this.isBlue
                    }
                }
            });
    </script>


实例——图片切换

  1. 数组保存多张图片
  2. 索引来存储当前数组的值
  3. v-bind 图片显示内容的更改,即改变图片的地址 src
  4. v-on 点击,事件绑定
  5. v-show 在第一张和最后一张,我们需要隐藏标签(左右按钮)

CSS部分

<style type="text/css">
        *{
            padding:0;
            margin: 0;
        }
        #app{
            margin: 100px auto;
            width: 600px;
            height: 300px;
            position: relative;
        }
        #app a{
            width: 45px;
            height: 100px;
            position: absolute;
            top:50%;
            margin-top: -50px;
            vertical-align: middle;
            opacity: 0.2;
        }
        #app a:hover{
            opacity: 0.4;
        }
        #app a.left{
            left: -45px;
            text-align: left;
        }
        #app a.right{
            right:-45px;
            text-align: right;
        }

        .center{
            width: 600px;
            height: 300px;
            display: block;
        }
    </style>

html部分

    <div id="app">
        <!-- 主图 -->
        <img src="images/p1.jpg" alt="" class="center"> 
        <!-- 左箭头 -->
         <a href="#" class="left" >
             <img src="images/prev.png" alt="">
         </a>
        <!-- 右箭头 -->
        <a href="#" class="right" >
            <img src="images/next.png" alt="">
        </a>
    </div>
  1. 定义图片数组 imgArr:[ ]
imgArr:[
                   "images/p1.jpg",
                   "images/p2.jpg",
                   "images/p3.jpg",
                   "images/p4.jpg",
                   "images/p5.jpg",
              ],
  1. 添加图片索引 index : 0
	data : {
    	imgArr : [ ] ,
    	index : 0
 	} ,
  1. 在img绑定src属性
        <img :src="imgArr[index]" alt="">
  1. 图片切换逻辑
methods : {
                    prev : function ( ) {
						this.index--;
 } ,
                    next : function ( ) { }
                    	this.index++;
                }
  1. 显示状态切换
        <a href="#" @click="prev" v-show="条件">上一张</a>
        <a href="#" @click="next" v-show="条件">下一张</a>

v-show 的条件就是:

  1. 第一张图片,左箭头消失。只要不是第一张,就有左箭头
    v-show = "index!=0"
  2. 最后一张图片,右箭头消失。只要不是最后一张,就有左箭头
    v-show = "index<imgArr.length-1"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值