前端:Vue.js学习

前端:Vue.js学习

        • 1. 第一个Vue程序
        • 2. Vue指令
          • 2.1 v-if、v-else-if、v-else
          • 2.2 v-for
          • 2.3 事件绑定 v-on:
          • 2.4 v-model 数据双向绑定
          • 2.5 v-bind 绑定属性
        • 3. Vue组件
        • 4. Vue axios异步通信
        • 5. 计算属性
        • 6. 插槽 slots
        • 7. 自定义事件内容分发

1. 第一个Vue程序

首先把vue.js拷贝到本地,下载链接位:vue.js
参考代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>
<body>
    <div id="app">{{message}}</div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">
    var obj = new Vue({
        el:'#app',
        data:{
            message:"hello world!"
        }
    });
</script>
</html>

运行结果:
请添加图片描述
其中对象obj属性el表示绑定标签元素,属性data表示数据。支持双向绑定(即当数据发生变化时,视图也会发生变化,当视图发生变化时,数据也会跟着同步变化),简而言之就是在前端界面上,打开控制台,执行代码obj.message=‘其他’,执行完成这句代码之后,可以发现界面上显示为其他。
请添加图片描述

2. Vue指令

以v-开头的表示它是Vue提供的特殊特性,如v-bind、v-if、v-else等。

2.1 v-if、v-else-if、v-else

参考示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>
<body>
    <div id="app">
        <div v-if="num == 1">1</div>
        <div v-else-if="num == 2">2</div>
        <div v-else>其他数字</div>
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">
    var obj = new Vue({
        el:'#app',
        data:{
            num:1
        }
    });
</script>
</html>

上述指令用于判断展示哪个标签元素。如,在一个登录界面上,有多种登录方式,同时对应着多个不同的输入框布局,通过上述指令结合使用,可以轻轻松松实现所想要的效果。
请添加图片描述

2.2 v-for

用于循环遍历Vue绑定的标签元素中的数据,参考代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>
<body>
    <div id="app">
        <ul>
            <li v-for="item in items">{{item}}</li>
            <!-- <li v-for="(item,index) in items">{{item}},{{index}}</li> -->
        </ul>
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">
    var obj = new Vue({
        el:'#app',
        data:{
            num:1,
            items:[1,2,3,4,5]
        }
    });
</script>
</html>

运行结果:
请添加图片描述

2.3 事件绑定 v-on:

用于绑定事件,如点击一个按钮,弹出一个提示框,如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>
<body>
    <div id="app">
        <button v-on:click="fun1">点击我</button>
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">
    var obj = new Vue({
        el: '#app',
        data: {
            message: "hello world!"
        },
        methods: {
            fun1:()=>{
                // alert(this.message);
                alert(obj.message);
            }
        }
    });
</script>
</html>

运行结果:
请添加图片描述
为了简化操作,可以简写为@绑定的事件,如v-on:click简写为@click。

2.4 v-model 数据双向绑定

示例为一个输入框,在输入框中输入内容,在另一个标签元素内的文本内容会随着输入的内容而变化。参考示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="message">{{message}}
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">
    var obj = new Vue({
        el: '#app',
        data: {
            message: "hello world!"
        }
    });
</script>
</html>

运行结果:
在这里插入图片描述
另一个示例,下拉框双向绑定,参考代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>
<body>
    <div id="app">
        <select v-model="message">
            <option value="1" checked>1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>

        {{message}}
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">
    var obj = new Vue({
        el: '#app',
        data: {
            message: "1"
        }
    });
</script>
</html>

运行结果:
在这里插入图片描述

2.5 v-bind 绑定属性

学过springboot themlefy模板的读者应该了解这个th:href、th:value、th:src,v-bind也就和上述那些实现的效果一样,v-bind:href对应于th:href,为了简化操作,可以直接写成 :href

3. Vue组件

为了复用(重复使用),从某些方面说,也就是为了提升编写代码效率吧!比如导航栏,在很多界面上都需要,可以单独把这部分写到一个vue文件内,在其他哪些需要导航栏的html界面内,导入这个(组件)即可。(下述示例没有写vue文件)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>
<body>
    <div id="app">
       <ul>
            <liuze v-for="item in items" v-bind:v="item"></liuze>
       </ul>
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">
    
    Vue.component('liuze',{
        props:['v'],
        template: "<li>{{v}}</li>"
    });
    var obj = new Vue({
        el: '#app',
        data: {
            items: [1,2,3,4,5]
        }
    });
</script>
</html>

运行结果:请添加图片描述

4. Vue axios异步通信

axios主要作用:实现ajax异步通信。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
    <style>
        [v-clock]{
            display: none;
        }
    </style>
</head>
<body>
    <div id="app" v-clock>
       <div>{{info.code}}</div>
       <ul>
            <li v-for="item in info.data.list">
                <a v-bind:href="item.url">{{item.title}}</a>
            </li>
       </ul>
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript" src="./axios.js"></script>
<script type="text/javascript">
    
    var obj = new Vue({
        el: '#app',
        data(){
            return {
            	// 需要和json格式一致
                info:{
                    code: null,
                    data:{
                        list: [
                            {
                                title: null,
                                url: null
                            }
                        ]
                    }
                }
            }
        },
        mounted(){
            axios.get('https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=20&businessType=blog&orderby=&noMore=false&year=&month=&username=qq_45404396').then((result) => {
                this.info = result.data;
            });
        }// 钩子函数
    });
</script>
</html>

运行结果:
请添加图片描述

5. 计算属性

计算属性突出在属性,首先它是一个属性,其次这个属性是有计算的能力,这里的计算指的是函数;简单的说,它就是一个能够将计算结果缓存起来的属性(将行为转换成静态的属性),可以当作为缓存。不能methods里的方法名同名

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>

<body>
    <div id="app">
       currentTime: {{currentTime()}}
       <br> 
       <!-- 方法 -->
       currentTime2: {{currentTime2}} 
       <!-- 属性 -->
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">

    var obj = new Vue({
        el: '#app',
        methods:{
            currentTime:()=>{
                return new Date().getTime();
            }
        },
        // 计算属性
        computed:{
            // 里面写方法,是一个属性 
            // 不能methods里的方法名同名
            currentTime2:()=>{
                return new Date().getTime();
            }
        }
    });
</script>

</html>

运行结果:
请添加图片描述

6. 插槽 slots

关于组件如何接收模板内容,下述是官网关于这个知识点的介绍。
请添加图片描述

参考代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>

<body>
    <div id="app">
        <liuze>
            <liuze-title slot="liuze-title" v-bind:title="title"></liuze-title>
            <liuze-items slot="liuze-items" v-for="item in items" v-bind:item="item"></liuze-items> 
        </liuze>
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">

    Vue.component('liuze',{
        template:`
        <div>
            <slot name="liuze-title"></slot>
            <ul>
                <slot name='liuze-items'></slot>    
            </ul>    
        </div>
        `
    });

    Vue.component('liuze-title',{
        props:['title'],
        template:'<p>{{title}}</p>'
    });

    Vue.component('liuze-items',{
        props:['item'],
        template:'<li>{{item}}</li>'
    });

    var obj = new Vue({
        el: '#app',
        data:{
            title:"编程语言",
            items:['Java','Python','C','Go']
        }
    });
</script>

</html>

运行结果:
请添加图片描述

7. 自定义事件内容分发

现在相把上述编程语言进行删除操作,参考代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>vue学习</title>
</head>

<body>
    <div id="app">
        <liuze>
            <liuze-title slot="liuze-title" v-bind:title="title"></liuze-title>
            <liuze-items slot="liuze-items" v-for="(item,index) in items" 
            v-bind:item="item" :index="index" @remove="removeItem(index)"></liuze-items> 
        </liuze>
    </div>
</body>
<script type="text/javascript" src="./vue.js"></script>
<script type="text/javascript">

    Vue.component('liuze',{
        template:`
        <div>
            <slot name="liuze-title"></slot>
            <ul>
                <slot name='liuze-items'></slot>    
            </ul>    
        </div>
        `
    });

    Vue.component('liuze-title',{
        props:['title'],
        template:'<p>{{title}}</p>'
    });

    Vue.component('liuze-items',{
        props:['item','index'],
        template:'<li>{{item}} <button @click="remove">删除</button></li>',
        methods:{
            remove:function(index){
                this.$emit('remove',index);
            }
        }
    });

    var obj = new Vue({
        el: '#app',
        data:{
            title:"编程语言",
            items:['Java','Python','C','Go']
        },
        methods:{
            removeItem:function(index){
                this.items.splice(index, 1);
            }
        }
    });
</script>

</html>

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/73608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux进程篇】环境变量

【Linux进程篇】环境变量 目录 【Linux进程篇】环境变量基本概念常见环境变量查看环境变量方法测试PATH测试HOME测试SHELL和环境变量相关的命令环境变量的组织方式通过代码如何获取环境变量命令行参数命令行第三个参数通过第三方变量environ获取 本地变量通过系统调用获取或设置…

打造专属企业展示小程序

在当今的数字化时代&#xff0c;企业展示小程序已经成为了推广企业形象和吸引客户的重要工具。而如何打造一个专属的企业展示小程序呢&#xff1f;下面将带您一步步操作&#xff0c;通过乔拓云网来实现这一目标。 首先&#xff0c;您需要注册登录乔拓云网并进入操作后台。在乔拓…

(一)创建型设计模式:3、建造者模式(Builder Pattern)

目录 1、建造者模式含义 2、建造者模式的讲解 3、使用C实现建造者模式的实例 4、建造者模式的优缺点 5、建造者模式VS工厂模式 1、建造者模式含义 The intent of the Builder design pattern is to separate the construction of a complex object from its representatio…

vue自定义指令动态绑定

在企业微信侧边栏应用中&#xff0c;给dialog添加了拖拽功能&#xff0c;但是因为dialog高度超过了页面高度&#xff0c;所以高度100%时拖拽有个bug--自动贴到窗口顶部而且企业侧边栏宽高都有限制&#xff0c;拖拽效果并不理想&#xff0c;所以就想缩小dialog再进行拖拽。 拖拽…

【生成式AI】ProlificDreamer论文阅读

ProlificDreamer 论文阅读 Project指路&#xff1a;https://ml.cs.tsinghua.edu.cn/prolificdreamer/ 论文简介&#xff1a;截止2023/8/10&#xff0c;text-to-3D的baseline SOTA&#xff0c;提出了VSD优化方法 前置芝士:text-to-3D任务简介 text-to-3D Problem text-to-3D…

uniapp+vue3项目中使用vant-weapp

创建项目 通过vue-cli命令行创建项目 Vue3/Vite版要求 node 版本^14.18.0 || >16.0.0 uni-app官网 (dcloud.net.cn) npx degit dcloudio/uni-preset-vue#vite my-vue3-project打开项目 点击顶部菜单栏终端/新建终端 执行安装依赖指令 yarn install 或 npm install 安装vant…

Rust语法:变量,函数,控制流,struct

文章目录 变量可变与不可变变量变量与常量变量的Shadowing标量类型整数 复合类型 函数控制流if elseloop & whilefor in structstruct的定义Tuple Structstruct的方法与函数 变量 可变与不可变变量 Rust中使用let来声明变量&#xff0c;但是let声明的是不可变变量&#x…

windows常用shell命令大全

简介 基于鼠标操作的后果就是OS界面外观发生改变&#xff0c; 就得多花学习成本。更主要的是基于界面引导Path与命令行直达速度是难以比拟的。另外Geek很大一部分是键盘控&#xff0c;而非鼠标流的。 整理Windows的常用Shell命令&#xff0c;一方面帮助深入学习Mysql&#xf…

2023.08.13 学习周报

文章目录 摘要文献阅读1.题目2.要点3.问题4.解决方案5.本文贡献6.方法6.1 特征选择6.2 时间序列平稳性检测与数据分解6.3 基于GRU神经网络的PM2.5浓度预测 7.实验7.1 网络参数7.2 实验结果7.3 对比实验 8.讨论9.结论10.展望 PINNS模型1.自动微分2.全连接神经网络3.PINNs模型的P…

谈一谈在两个商业项目中使用MVI架构后的感悟

作者&#xff1a;leobertlan 前言 当时项目采用MVP分层设计&#xff0c;组员的代码风格差异也较大&#xff0c;代码中类职责赋予与封装风格各成一套&#xff0c;随着业务急速膨胀&#xff0c;代码越发混乱。试图用 MVI架构 单向流 形成 掣肘 带来一致风格。 但这种做法不够以…

【笔试题心得】关于KMP在笔试中的题型

好几家都考到KMP了 问的比较多的是 next数组 &#xff0c; 其实KMP的相关机制我在代码随想录算法训练营第九天|KMP算法_菜鸟的Zoom之旅的博客-CSDN博客中写道过&#xff0c;现在在复习一下&#xff0c;由于next数组的定义其实会有所歧义&#xff08;有些程序中会直接将前缀表作…

3.1 Qt样式选择器

本期内容 3.1 样式选择器 3.1.1 Universal Selector (通用选择器) 3.1.2 Type Selector (类型选择器) 3.1.3 Property Selector (属性选择器) 3.1.4 Class Selector (类选择器) 3.1.5 ID Selector (ID选择器) 3.1.6 Descendant Selector (后裔选择器) 3.1.7 Chil…

考研408 | 【计算机网络】 网络层

导图 网络层&#xff1a; 路由器功能&#xff1a;转发&路由选择 数据平面 数据平面执行的主要功能是根据转发表进行转发&#xff0c;这是路由器的本地动作。 控制平面 1.传统方法/每路由器法&#xff1a; 2.SDN方法&#xff08;Software-Defined Networking) 控制平面中的…

docker nginx ssl设置

使用docker运行nginx&#xff0c;配置代理&#xff0c;和ssl设置&#xff0c;进行https访问 一 准备 本次在centos环境中 1.已安装docker&#xff0c;docker-compose 2.运行了一个后端服务容器&#xff0c;提供基本的接口访问【可选】 3.一个域名&#xff08;已经解析到服…

mfc140u.dll丢失的解决方法-mfc140u.dll是什么文件

在使用计算机过程中&#xff0c;我们经常会遇到各种错误提示和问题&#xff0c;其中一个常见的问题是与mfc140u.dll文件有关的错误。mfc140u.dll是Microsoft Foundation Classes(MFC)的一个动态链接库文件&#xff0c;它提供了许多用于开发Windows应用程序的函数和类。 当mfc1…

go语言的database/sql结合squirrel工具sql生成器完成数据库操作

database/sql database/sql是go语言内置数据库引擎&#xff0c;使用sql查询数据库&#xff0c;配置datasource后使用其数据库操作方法对数据库操作&#xff0c;如下&#xff1a; package mainimport ("database/sql""fmt"_ "github.com/Masterminds…

回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测

回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测&#xff1b; 2.运行环…

嵌入式:ARM Day1

1. 思维导图 2.作业一 3.作业2

MySQL入门学习教程(二)

上一篇文章讲的是mysql的基本操作&#xff0c;这一篇会有一点难以理解&#xff0c;本节主要内容mysql视图&#xff0c;存储过程&#xff0c;函数&#xff0c;事务&#xff0c;触发器&#xff0c;以及动态执行sql 视图view 视图是一个虚拟表&#xff0c;其内容由查询定义。同真…

day24-106.从中序与后序遍历序列构造二叉树

106.从中序与后序遍历序列构造二叉树 力扣题目链接(opens new window) 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 中序遍历 inorder [9,3,15,20,7]后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&am…