vue

1.1 前端的发展史

# 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览器中查看
    -javascript=ECMAScript(5,6,13) + Dom + Bom
# 2 Ajax的出现 -> 后台发送异步请求,Render+Ajax混合
    -异步JavaScript和XML
    -咱们学的是jq的ajax函数
# 3 单用Ajax(加载数据,DOM渲染页面):前后端分离的雏形
# 4 Angular框架的出现(1个JS框架):出现了“前端工程化”的概念(前端也是1个工程、1个项目)
# 5 React、Vue框架:当下最火的2个前端框架(Vue:国人喜欢用,React:外国人喜欢用)
# 6 移动开发(Android+IOS) + Web(Web+微信小程序+支付宝小程序) + 桌面开发(Windows桌面):前端 -> 大前端
# 7 一套代码在各个平台运行(大前端):谷歌Flutter(Dart语言:和Java很像)可以运行在IOS、Android、PC端
# 8 在Vue框架的基础性上 uni-app:一套编码 编到10个平台
# 9 在不久的将来 ,前端框架可能会一统天下

2 Vue介绍 和 基本使用
4 插值语法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="./js/vue.js"</script></head>
<body>
<div id="app">
    <p>字符串:{{name}}</p>
    <p>数字:{{age}}</p>
    <p>数组:{{hobby}}--->{{hobby[1]}}</p>
    <p>对象:{{wife}}--->{{wife['name']}}---->{{wife.age}}</p>
    <p>标签形式字符串:{{a}}--->说明不存在xss攻击</p>
    <p>-----插值语法,还可以放,简单表达式和函数(后面了)-----</p>
    <p>简单表达是:{{1 + 1}}</p>
    <p>三目运算符【条件?符合条件执行这个:不符合条件】:{{10>2?'正确':'不正确'}}</p>
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            name: 'lqz',   age: 19,
            hobby: ['篮球', '足球', 'spa'],  // js 就叫数组
            wife: {name: '刘亦菲', age: 38},   // js 中叫对象
            a: '<a href="http://www.baidu.com">点我看美女</a>'  // 标签形式字符串
        }
    })
</script>
</html>

4 文本指令

# pycharm需要安装插件,才能有提示
# 指令系统: 写在标签上,v-开头的 标签,称之为指令,每个指令都有特殊用途
    v-指令名='写原来插值能写的东西'
    v-指令名='name'  # 变量
# v-text:把变量渲染在标签内部
# v-html:把标签类型的字符串直接渲染成标签
# v-if: 控制标签显示与否,直接删除或加入标签
# v-show:控制标签显示与否,通过样式的display: none;控制显示与否

<div id="app">
    文本指令之 v-text,把变量渲染在标签内部:<span v-text="a"></span>
    <br> 插值语法:<span>{{a}}</span>
    <br>文本指令之v-html,把标签类型的字符串直接渲染成标签:<span v-html="a"></span>
    <h2>v-if的使用,只能写条件,或布尔类型的变量</h2>
    <div v-if="is_show">我是个div---v-if的使用</div>
    <br>
    <h2>v-show的使用</h2>
    <div v-show="is_show"> 我是个div---v-show的使用</div>
</div>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            a: '<a href="http://www.baidu.com">点我看美女</a>',  // 标签形式字符串
            is_show: false,
        }        })
</script>

5 事件指令

# 用的最多的就是点击事件,给某个标签绑定一个点击事件,当点击一下,就执行某个函数
# 使用方式
v-on:事件名='函数名'    重点:可以简写成:@事件='函数名'
0.1 vm对象:
// 1 写在data或method中的属性或方法,从vm中直接可以 . 出来:vm.name
// 2 methods的函数中,如果想使用data或methods中的属性,直接this.名字  就可以了
0.2 函数传参:触发函数,可以传参数
<h1>函数,可以多传参数,也可也少传参数,都不会报错</h1>
<button @click="handleClick('lqz')">点我</button>
<h1>事件对象,调用函数,不传参数,会把当前事件对象,传入,可以不接受,也可以接受</h1>
<button @click="handleClick2">点我2</button><br>
<button @click="handleClick3('lqz',$event)">点我3</button>
        handleClick(name, age) {console.log(name, age)},
        handleClick2(event) {console.log(event)},
        handleClick3(name, event) {
            console.log(name)
            console.log(event)
        }

6属性指令使用:v-bind:src="url", :class= :style=
案例

<div id="app">
    <button @click="handleStart">点我开始选</button> <hr> <img :src="url" alt="" @click="handleStop">
</div>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            url: 'https://img2.woyaogexing.com/2023/06/01/11de6aa55c3ccc0fc35ba1ab6e4ae2b5.jpg',
            img_list: [ 'http://pic.imeitou.com/uploads/allimg/230530/10-2305301A538.jpg','http://pic.imeitou.com/uploads/allimg/230530/10-2305301A539.jpg','http://pic.imeitou.com/uploads/allimg/230530/10-2305301A540.jpg',],
            t: null
        },
        methods: {
            handleStart() {
                //定时器---》每隔 某个事件 做一件事
                var _this = this
                this.t = setInterval(function () {
                    // url 随机从列表中取值,赋值给url
                    // Math.random() 生成0--1之间的小数,Math.floor 向下取整
                    var res = Math.floor((Math.random() * _this.img_list.length))
                    _this.url = _this.img_list[res]
                    console.log(_this.url)
               }, 1000)
            },
            handleStop() {
                // 停止定时器
                clearInterval(this.t)
                this.t = null
            }            }        })
</script>

style和class

<style>
    .size {            font-size: 60px;        }
    .red {            background-color: red;        }
    .yellow {            background-color: yellow;        }
</style>
<div id="app">
    <h1>class 的使用:字符串,数组,对象</h1>
    <button @click="handleClick">点我变样式</button><br>
    <div :class="class_obj">我是div </div>
    <h1>style 的使用:字符串,数组,对象</h1><br>
    <div :style="style_obj">我是div</div>
</div>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            // class 推荐使用 数组方式
            // class 绑定的变量,类型可以是 字符串,数组,对象
            // class_str: 'size',  // vm.class_str='size red'
            // class_arr: ['red'],  // vm.class_arr.push('size'),给该变量,追加值,class变化,页面会发生变化
            // class_obj: {size: true, red: false} // 对象的用法,必须先提前设置,后期通过修改true或false控制类
            class_obj: {size: true},// 但是不能往对象中放之前不存在的值,放不存在的值,没有响应式

            // style 推荐使用   对象形式
            // style_str:'font-size: 80px;background-color: green', // vm.style_str='background-color: red'
            // style_arr: [{'font-size': '60px'}]  // vm.style_arr.push({'background-color':'red'})
            // style_obj: {'font-size': '60px', 'background-color': 'green'},
            style_obj: {fontSize: '60px', backgroundColor: 'green'},  // 省略key值的引号后,要变成驼峰形式
        },
        methods: {
            handleClick() {
                // this.class_obj.yellow = true  // 直接放,没有响应式
                Vue.set(this.class_obj, 'yellow', true) // 这样才有响应式
            }            }        })
</script>

条件渲染v-if v-else-if v-else

<div v-if="score>90&&score<=100">优秀</div>
<div v-else-if="score>80&&score<=90">良好</div>
<div v-else-if="score>=60&&score<=80">及格</div>
<div v-else>不及格</div>

v-for

                <table><tbody><tr v-for="good in good_list">
                    <th scope="row">{{good.id}}</th>
                    <td>{{good.name}}</td>
                    <td>{{good.price}}</td>
                    <td>{{good.count}}</td>
                </tr></tbody></table>
            this.good_list = [
                {'id': 1, 'name': '小汽车', 'count': 2, 'price': 100000},
                {'id': 2, 'name': '脸盆', 'count': 1, 'price': 23},
                //......
            ]
<h1>循环数字5(不管括号内写的参数是什么,第一个表示值,第二个表示索引)</h1>
<ul><li v-for="(value,index) in number">{{value}}---->{{index}}</li></ul>
<dl><dd v-for="(index,value) in number">{{index}}---->{{value}}</dd></dl>
<h1>循环字符串'lqz is handsome'</h1>
<ul><li v-for="(value,index) in str">{{value}}--->{{index}}</li></ul>
<dl><dd v-for="(index,value) in str">{{index}}--->{{value}}</dd></dl>
<h1>循环数组[3, 4, 2, 66, 55]</h1>
<ul><li v-for="(value,index) in arr">{{value}}---->{{index}}</li></ul>
<dl><dd v-for="(index,value) in arr">{{index}}---->{{value}}</dd></dl>
<h1>循环对象(key和value是反的){name: 'lqz', age: 19, gender: '男'}(不管括号内写的参数是什么,第一个表示值,第二个表示key)</h1>
<ul><li v-for="(value,key) in obj">key是:{{key}}=====value是:{{value}}</li></ul>
<dl><dd v-for="(key,value) in obj">value是:{{value}}=====key是:{{key}}</dd></dl>
<script>
    let vm = new Vue({
        el: '#app',
        data: {
            number: 10,
            str: 'lqz is handsome',
            arr: [3, 4, 2, 66, 55],
            obj: {name: 'lqz', age: 19, gender: '男'}
        },            methods: {}        })
</script>

事件处理

# 事件指令
    -click:点击事件
# input标签的事件
    -input:只要输入内容,就会触发
    -change:只要输入框发生变化,就会触发
    -blur:只要失去焦点,就会触发

数据双向绑定

<h1>单向数据绑定,咱们不用</h1>
<!--    <p>用户名<input type="text" :value="username"></p>
     <p>密码<input type="password" :value="password"></p>
       <button @click="handleSubmit">登录</button>-->

<h1>双向数据绑定</h1>
<p>用户名<input type="text" v-model="username"></p>
<p>密码<input type="password" v-model="password"></p>
    <button @click="handleSubmit">登录</button>
let vm = new Vue({
    el: '#app',
    data: {
        username: 'lqz',
        password: '123'
    },
    methods: {
        handleSubmit() {console.log(this.username,this.password)}        }    })

过滤案例

错误1

错误情况如图<ul><li v-for="(value,index) in dataList">{{index,value}}</li></ul>
正确代码<ul><li v-for="(value,index) in dataList">{{index}}:{{value}}</li></ul>
错误2:(value,index)in   括号和in 之间必须空格
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • # Vue.js - day01 ## 插件安装推荐 vscode有二个常用插件:vetur,Vue 2 Snip...
    wuyuan0127阅读 519评论 0 0
  • 一、 Vue 介绍 Vue.js 是一套构建用户界面的渐进式 JavaScript 框架 可以轻松构建 SPA 应...
    璎珞纨澜阅读 812评论 0 0
  • 初识Vue2.0 想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象 vue容器里的代码依然符合htm...
    Zindex阅读 398评论 0 0
  • 一、Vue简介 Vue.js 是一个用于创建 Web 交互界面的库。它让你通过简单而灵活的 API 创建由数据驱动...
    雪妮爸爸阅读 1,085评论 0 1
  • 本文整理来自深入Vue3+TypeScript技术栈-coderwhy大神新课[https://ke.qq.com...
    Imkata阅读 2,058评论 0 0