Vue.js 学习笔记

2023-11-17

vue基础

  • {{}} 显示js界面传过来的数据
  • v-bind 绑定提示信息
  • v-if 条件语句
  • v-for 绑定数组数据
  • v-on 添加一个事件监听器,通过它可以调用Vue实例中定义的方法
  • v-model 表单输入和应用状态之间的双向绑定
  • Vue.component() 定义组件
  • v-html 用于输出真正的html
  • v-pre 用于显示{{}} 而不进行替换,可以跳过这个元素和它的子元素的编译过程

双向数据绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue learn</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

</head>
<body>

<div id="app">
    <input type="text" v-model="name" placeholder="name">
    <h1>hello,{{name}}</h1>

</div>

<script src="index.js"></script>
</body>
</html>

var app = new Vue({
    el:'#app',
    data:{
        name: ''
    }
})

可以通过app.$el 访问该元素,Vue提供了很多的属性和方法都可以通过$开头

一个计时器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue learn</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

</head>
<body>

<div id="app">
    {{date | formateDate()}}
</div>

<script src="index.js"></script>
</body>
</html>

var padDate = function (value) {
    return value < 10 ? '0' + value : value;
};


var app = new Vue({
    el: '#app',
    data: {
        date:new Date()
    },
    filters:{
        formateDate:function (value) {
            var date = new Date(value);
            var year = date.getFullYear();
            var month = padDate(date.getMonth()+1);
            var day = padDate(date.getDate());
            var hours = padDate(date.getHours());
            var minuates = padDate(date.getMinutes());
            var seconds = padDate(date.getSeconds());
            return year + '年' + month + '月' + day + '日' + " " + hours + ":" + minuates + ":" + seconds;
        }
    },
    mounted:function () {
        var _this = this;
        this.timer = setInterval(function () {
            _this.date = new Date();
        },1000);
    },
    beforeDestroy: function () {
        if(this.timer){
            clearInterval(this.timer);
        }
    }
})


{{}} 中不但可以绑定属性值,还可以使用JavaScript表达式进行简单的运算、三元运算等

<div id="app">
    {{number/10}}</br>
    {{is ? 'yes':'no'}}</br>
    {{text.split('').reverse().join('')}}</br>
</div>
var app = new Vue({
    el:'#app',
    data:{
        number: 100,
        is: false,
        text: 'Martin'
    }
})

v-if 用法

当其表达式的值改变时,相应地将某些行为应用到DOM上

<div id="app" align="center">
    <p v-if="show">show this message</p>
</div>
var app = new Vue({
    el:'#app',
    data:{
        show:true
    }
})

v-bind 用法

动态更新html元素的属性

<div id="app" align="center">
    <a v-bind:href="url">link</a>
    <img v-bind:src="imgUrl">
</div>
var app = new Vue({
    el:'#app',
    data:{
        url:'https://www.baidu.com/',
        imgUrl:'https://www.baidu.com/img/xinshouye_353af22a7f305e1fb6cfa259394dea9b.png'
    }
})

v-on 用法

用来绑定事件监听器

<div id="app" align="center">
    <p v-if="show">message</p>
    <button v-on:click="handleClose">点击隐藏</button>
</div>
var app = new Vue({
    el:'#app',
    data:{
        show:true
    },
    methods:{
        handleClose:function () {
            this.show = false;
        }
    }
})

语法糖

vue元素 替换
v-bind :
v-on @

计算属性

如果表达式过长,或者逻辑更为复杂,就会变得臃肿,难以阅读和维护,这个时候可以使用计算属性进行改写,所有的计算属性都以函数的形式写在Vue实例内的computed选项内,最终返回计算后的结果

<div id="app" align="center">
    {{reversedText}}
</div>
var app = new Vue({
    el:'#app',
    data:{
        text:'hello Martin'
    },
    computed:{
        reversedText:function () {
            return this.text.split('').reverse().join('')
        }
    }
})

计算属性还可以依赖多个Vue实例的数据,只要任一个数据变化,计算属性就会重新执行,视图也会更新。
计算属性不仅可以依赖当前Vue实例的数据,还可以依赖其它实例的数据。

<div id="app" align="center">
    姓名:{{fullName}}
</div>
var app = new Vue({
    el: '#app',
    data: {
        firstName:'Martin',
        lastName:'yu'
    },
    computed: {
        fullName:{
            get:function () {
                return this.firstName + " " + this.lastName;
            },
            set: function (newValue) {
                var names = newValue.split(' ');
                this.firstName = names[0];
                this.lastName = names[names.length - 1];
            }
        }
    }
})

计算属性缓存

methods 也可以实现和计算属性相同的效果,但是,计算属性是基于它的依赖缓存的,只有当它所依赖的数据发生变化时,它才会重新取值。而methods却是不同,只要重新渲染,它就会被调用,函数也会被执行。

v-bindclassstyle绑定

对象语法

<div id="app">
    <div :class="{'active':isActive}"></div>
</div>
var app = new Vue({
    el:'#app',
    data:{
        isActive:true
    }
})

对象中也可以传入多个属性,来动态的切换class:class 可以与普通 class 共存,也可绑定计算属性。如果需要多个class 时,可以使用数组语法,给:class 绑定一个数组,应用一个class 列表

v-cloak

解决初始化慢导致页面闪动

v-once

定义它的元素或组件只渲染一次,包括元素或组件所有子节点。首次渲染后,不再随数据的变化重新渲染,将被视为静态内容。

v-if v-else-if v-else

添加key 值防止元素被复用

<div id="app">
    <template v-if="type === 'name'">
        <label>user name:</label>
        <input placeholder="user name" key="name-input">
    </template>
    <template v-else>
        <label>email:</label>
        <input placeholder="email" key="email-input">
    </template>
    <button @click="handleToggleClick">switch type</button>
</div>
var app = new Vue({
    el:'#app',
    data:{
        type:'name'
    },
    methods:{
        handleToggleClick:function () {
            this.type = this.type === 'name' ? 'email':'name';
        }
    }

})

v-show

v-show是改变元素的css属性display,当表达式为false时,元素会隐藏,元素内联样式为display:none
v-ifv-show的区别就是,v-show仅仅是简单的css样式切换,无论条件真与否,都会被编译,而v-if 是真正的条件渲染,它会根据表达式适当地销毁或重建元素及绑定的事件或子组件。

v-for

<div id="app">
    <ul>
        <li v-for="book in books">{{book.name}}</li>
    </ul>
</div>
var app = new Vue({
    el:'#app',
    data:{
        books:[
            {name:'hello'},
            {name:"world"},
            {name:'yu'}
        ]
    }

})

v-for的表达式支持一个可选参数作为当前项的索引,例如v-for="(book,index) in books"

数组更新

会改变原始数组:
push()
pop()
shift()
unshift()
splice()
sort()
reverse()
不会改变原始数组的:
filter()
concat()
slice()

购物车

<!DOCTYPE html>
<html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Vue learn</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>

<div id="app" v-cloak align="center">
    <template v-if="list.length">

        <table>
            <thead>
            <tr>
                <th></th>
                <!--<th>选择</th>-->
                <th>商品名称</th>
                <th>商品单价</th>
                <th>购买数量</th>
                <th>操作</th>
            </tr>
            </thead>
            <tbody>
            <tr v-for="(item,index) in list">
                <!--<td><input type="checkbox" name="shopingCheck"></td>-->
                <td>{{index+1}}</td>
                <td>{{item.name}}</td>
                <td>{{item.price}}</td>
                <td>
                    <button @click="handleReduce(index)" :disabled="item.count==1">-</button>
                    {{item.count}}
                    <button @click="handleAdd(index)">+</button>
                </td>
                <td>
                    <button @click="handleRemove(index)">移除</button>
                </td>
            </tr>
            </tbody>
        </table>
        <div>总价:¥ {{totalPrice}}</div>
    </template>
    <div v-else>购物车为空</div>

</div>

<script src="index.js"></script>
</body>
</html>

var app = new Vue({
    el:'#app',
    data:{
        list:[
            {
                id:1,
                name:'iphone 7',
                price:5999,
                count:1
            },
            {
                id:2,
                name:'iphone 8',
                price:5888,
                count:2
            },
            {
                id:3,
                name:'macbook pro',
                price:18688,
                count:1
            }
        ]
    },
    computed:{
        totalPrice:function () {
            var total = 0;
            for(var i=0;i<this.list.length;i++){
                var item = this.list[i];
                total+=item.price*item.count;
            }
            return total.toString().replace(/\B(?=(\d{3})+$)/g,',');
        }
    },
    methods:{
        handleReduce:function (index) {
            if(this.list[index].count ===1) return;
            this.list[index].count--;
        },
        handleAdd:function (index) {
            this.list[index].count++;

        },
        handleRemove:function (index) {
            this.list.splice(index,1);
        }
    }


})

[v-cloak]{
    display:none;
}
table{
    border:1px solid #e9e9e9;
    border-collapse: collapse;
    border-spacing:0;
    empty-cells:show;
}
th,td{
    padding:8px 16px;
    border:1px solid #e9e9e9;
    text-align:left;
}
th{
    background:#f7f7f7;
    color:#5c6b77;
    font-weight: 600;
    white-space: nowrap;
}

单选按钮

<div id="app">
    <input type="radio" :checked="picked">
    <label>单选按钮</label>
</div>
var app = new Vue({
    el:'#app',
    data:{
        picked:false
    }

})

如果想要实现互斥的话可以通过使用v-model配合value 使用

<div id="app">
    <input type="radio" v-model="picked" value="html" id="html">
    <label for="html">html</label>
    </br>
    <input type="radio" v-model="picked" value="js" id="js">
    <label for="html">javaScript</label>
    </br>
    <input type="radio" v-model="picked" value="css" id="css">
    <label for="html">css</label>
    </br>
    <p>选择是:{{picked}}</p>
</div>
var app = new Vue({
    el:'#app',
    data:{
        picked:'js'
    }

})

复选按钮

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue.js 学习笔记 的相关文章

  • java 读取property文件

    java 读取property文件package com import java io IOException import java io UnsupportedEncodingException import java util Pro
  • 泛谈HWND和CWnd

    一 略析 HWND Windows系统中对所有窗口的一种标识 即窗口句柄 一个SDK概念而已 并没有实际对象操作的地址空间 它只是一个32位的无符号整型数值 代表了句柄号handle CWnd MFC类库中所有窗口类的基类 MFC中所有窗口
  • 思维导图软件哪个好?盘点10款好用的思维导图软件

    思维导图是表达发散性思维的有效图形思维工具 被大家广泛应用在工作 学习或生活中 目前市面上制作思维导图的软件也非常多 很容易让大家在选择时出现选择困难症 下面N妹就整理了十款好用的思维导图软件 一起来看看哪款适合自己吧 1 MindNow

随机推荐

  • Linux之系统管理——15

    一 进程管理 进程简介 1 什么是进程管理 那么到底什么是进程呢 进程是正在执行的一个程序或命令 每个进程都是一个运行的实体 都有自己的地址空间 并占用一定的系统资源 那么什么是程序呢 程序是人使用计算机语言编写的可以实现特定目标或解决特定
  • Python——Python基础编程题目

    1 编写程序 求1 100中偶数之和 2 利用字典编写程序实现统计字符串str skdaskerkjsalkj 请统计出该字符串各字母出现的次数 3 已知列表li num1 4 5 2 7 和li num2 3 6 请编程将这个两个列表合并
  • Ubuntu下初始化root用户密码

    在用户安装Ubuntu成功之后 以真机为例 进入图形登录界面之后 Ubuntu会默认用户使用新创建的用户帐号密码登录 例 在配置Ubuntu时 我设本用户账户为 zzh 设本用户密码为 123456 因此 我所登录的即为zzh这个账户 而在
  • ES6入门:let、const、 var区别及注意事项

    ES6入门 let const var区别及注意事项 一 let const 1 用来声明变量或声明常量 2 let 代替 var 声明变量 const 声明常量 为了那些一旦初始化就不希望重新赋值的情况设计的 3 var let声明的就是
  • Early Orders单调栈

    链接 题目描述 You are given a list of integers n and a number k It is guaranteed that each i from 1 to k appears in the list a
  • Java EasyExcel高效读取保存excel文件

    文章目录 前言 JAVA解析Excel工具 网站 引入EasyExcel依赖 快速开始 读Excel 写Excel web上传 下载 前言 阿里开源出一款易上手 且比较节省内存的Excel操作框架 EasyExcel EasyExcel是一
  • 【c++中的细节问题】C++何时需要自定义析构函数呢?

    请见 https blog csdn net love9099 article details 43086945
  • pycharm和navigator打开时出现报错,无法正常打开

    1 navigator打开时出现提示 原因是 python exe有多个任务在占用 解决办法 1 打开cmd 2 输入 tasklist findstr pythonw 3 有几个线程就kill几个线程 使用命令 tskill PIN码 如
  • Web综合应用实验(html css javascript)

  • crontab用法

    crontab用法 几个例子 我们来看一个超级用户的crontab文件 crontab 用法 crontab 命令用于安装 删除或者列出用于驱动 cron 后台进程的表格 也就是说 用户把需要执行的命令序列放到 crontab 文件中以获得
  • MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用

    在MySQL中可以使用IF IFNULL NULLIF ISNULL 函数进行流程的控制 1 IF 函数的使用 IF expr1 expr2 expr3 如果expr1的值为true 则返回expr2的值 如果expr1的值为false 则
  • react路由使用

    1 插件添加 cnpm install react router dom S 2 app js书写 import React Component from react 路由的2种形式 hash HashRouter H5的historyAp
  • mysql最大连接数修改

    当mysql出现 Too many connections 异常时 说明mysql数据库连接数过高 增加方法如下 如果可以登录 可以使用以下语句临时增加连接数 重启后失效 set GLOBAL max connections 1024 永久
  • zbrush插件布尔运算插件perfectbool安装方法

    zbrush插件直接复制粘贴到此路径的文件夹里 D Program Files Pixologic ZBrush 2020 1 3 ZStartup ZPlugs64 安装好了后 重启zb软件 即可在右侧面板最下面找到该插件了
  • MybatisPlus常用方法

    1 in QueryWrapper
  • 如何用matlab写一个电动汽车空调仿真模型

    首先 您可以研究电动汽车空调的工作原理 并了解其相关的物理参数 例如空调系统的热量转移 制冷剂流动以及空气循环等 然后 您可以使用 MATLAB 的 Simulink 模块开发模型 Simulink 是一个基于图形的仿真工具 可以方便地模拟
  • 用顺序表实现图书信息管理(增删改查)---c语言版

    顺序表 概念 用一组地址连续的存储单元依次存储线性表的数据元素 这种存储结构的线性表称为顺序表 特点 逻辑上相邻的数据元素 物理次序也是相邻的 实现 用结构体定义一本图书 typedef struct int id char name 20
  • zotero+坚果云同步

    在使用Zotero整理文献的时候 软件自带的云同步有300M的上限 但软件还提供了Webdav同步的设置选项 在国内的众多云盘中 坚果云是为数不多甚至说唯一的支持Webdav的云盘 设置同步的流程如下 在网页端的坚果云登录之后 点击右上角的
  • 微信小程序常用表单控件

    感谢慕课网七月老师课程 如何一次性获取所有表单控件的值并且提交到服务器上去呢 from表单提交 使用form把所有子元素包含进去
  • Vue.js 学习笔记

    vue基础 显示js界面传过来的数据 v bind 绑定提示信息 v if 条件语句 v for 绑定数组数据 v on 添加一个事件监听器 通过它可以调用Vue实例中定义的方法 v model 表单输入和应用状态之间的双向绑定 Vue c