IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue的简单指令 -> 正文阅读

[JavaScript知识库]vue的简单指令

Vue

组件化、虚拟化dom、MVVM(特点)

vue的作者:尤雨溪(官网Vue.js

vue的使用:

vue的特点:

组件是什么?将代码封装成一个组件,每个人都能够使用

虚拟dom ? 就是一个虚拟的空间(空间换时间

Ajax请求一个数组,数组里面怎样放?for循环一个多个加上去

模型数据是从数据库中查出来反映给前端的数据(通过操作dom节点去拼接显示)

有其他操作如添加,dom又要重新获取模型数据拼接到页面中

而虚拟dom就相当于开辟一个新的缓存空间:模型数据放入到虚拟dom中,前端又从里面拿数据

这样的好处是,当改变数据时已经存在的数据不用反复更新抓取给dom,直接从虚拟dom拿

1.Vue简介

Vue.js : 用于构建用户界面的渐进式JavaScript 框架(官网说明),它就是一个前端MVVM框架

特别:自底向上逐层应用的----把基础先写好,再逐层往上添加功能和效果

jQuery:给页面绑定数据

vue devtools:在浏览器上安装,方便测试调试

2.安装Vue

(1)先安装node.js

(2)在官网下载开发版本的vue.js,引入html中<script src="../js/vue.js"></script>

Vue实例和容器是一一对应的;

真实的开发中只有一个vue实例,并且会配合着组件一起使用

{{xxxx}}中的xxxx要写js表达式,xxxx可以自动读取到data中的所有属性

一旦data中的数据发生改变,那么页面中用到该数据的地方也会自动更新

第一个vue

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<meta http-equiv="X-UA-Compatible" content="IE=edge">
 ? ?<meta name="viewport" content="width=device-width, initial-scale=1.0">
 ? ?<title>Document</title>
 ? ?<script src="../js/vue.js"></script>
</head>
<body>
 ? ?<div id="app">
 ? ? ? ?<p>{{message}}</p>
 ? ?</div>
 ? ?
 ? ?<script>
 ? ? ? ?// 消除console中的错误提示
 ? ? ? ?Vue.config.productionTip=false;//设置为 false 以阻止 vue 在启动时生成生产提示。 ? ?
 ? ? ? ? // 一个vue实例只能指定一个容器,一个容器也只能被一个vue实例服务
 ? ? ? ? new Vue({
 ? ? ? ? el:"#app", ?//指定该vue服务于哪一个容器
 ? ? ? ? data:{message:"hello"} 
 ? ? ? ? //data用来存储数据的,数据供给el指定的容器去使用,值我们暂时写成一个对象 ?
 ? ? ?  })
 ? ?</script>
</body>
</html>
 

3.vue的插值语法和指令语法

插值语法:<标签> {{xxx}} </标签>

指令语法:<标签 v-属性=“ ”> </标签>

(1)给属性绑定数据:v-bind:href=“url” data: {url:"www.baidu.com" }

简写 :href=“url”

4.数据绑定

单向绑定:v-bind (哪里的属性都能使用,后台变前台变,前台变后台不变)

简写 :<input :value="address"></input>

双向绑定:v-model (只能用于表单类型,就是有value值的)

简写:<input v-model="address"></input>

5.el与data的两种写法

{{name}}---能够访问到name并不是因为她在data中出现

而是将data里面出现字段全部转换为vue实例的属性

所以他也能够访问原型中的数据properties

data:{

name:"东软"

}

el的两种写法

const c = new Vue({
//el方式一:
 ? ?el:"#app",
    data:{
        name:"东软"
    }
});
//el方式2:
c.$mount("#app")    //$mount挂载、绑定

data的两种写法

const c = new Vue({
?
 ? ?el:"#app",
 ? ?//方法1:对象式
    data:{
        name:"东软"
    }
 ? ?//方法2:函数式  (较常用,因为使用组件)
 ? ?data:function(){
 ? ? ? ?return {name:"张三"}
 ?  }
 ? ?//可简写
 ? ?data(){
 ? ? ? ?return {name:"张三"}//返回一个对象
 ?  }
 ? ?
 ? ?//切记不能使用箭头函数
 ? ?this指的是当前vue实例
 ? ? ? ?有箭头函数的this指向的是window
 ? ? data:()=>{}
});


6.理解MVVM

vue受到MVVM的启发

与v-model

vue实例将数据挂载到容器

M:model模型数据 //就是vue实例里面的data
V:view视图 //就是容器
VM:ViewModel视图模型//就是vue实例-----监听数据、绑定数据
 ? ?
//为什么v改M也改,而M改V也改?VM的作用:就是vue实例监听数据、绑定数据

7.Object.defineProperty给对象添加属性

如果做到变量1变成变量2的属性,且两者能够实现同变化

set(e){ name=e; -----重要的是这个,e=name时不能同变化 }

-----给变量2的属性赋值时,默认使用其set()方法

-----当访问变量2的属性时,默认使用get()方法


<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<meta http-equiv="X-UA-Compatible" content="IE=edge">
 ? ?<meta name="viewport" content="width=device-width, initial-scale=1.0">
 ? ?<title>Document</title>
</head>
<body>
 ? ?<script>
 ? ? ? ?var name="zhangsan";
 ? ? ? ?var per={age:10,address:"东软"}
 ? ? ? 
 ? ? ? ?Object.defineProperty(per,"name",{//给变量per添加name属性
 ? ? ? ? ? ?
 ? ? ? ? ? ?// 当访问per中的name属性时会自动调用getter
 ? ? ? ? ? ?get(){
 ? ? ? ? ? ? ? ?console.log("有人访问name了")
 ? ? ? ? ? ? ? ?return name;
 ? ? ? ? ?  },
 ? ? ? ? ? ?// 当对per中的name属性赋值时会自动调用setter
 ? ? ? ? ? ?set(e){
 ? ? ? ? ? ? ? ?name=e;
 ? ? ? ? ?  }
 ? ? ?  })
 ? ? ? ?// name="lisi";
 ? ? ? ?per.name="lisi";
 ? ? ? ?console.log(name)
 ? ? ? ?console.log(per.name)
?
 ? ?</script>
</body>
</html>

8.数据代理

什么是数据代理?

一个对象代理另一个对象的数据操作

Object.defineProperty(对象1,“代理的属性1”,{

get(){ return 对象1.属性1;}

set(e){ 对象1.属性1=e}

})

Vue中的数据代理:就是VM进行的操作Object.defineProperty()

Vue实例的属性中会有data中属性,也会有一个重要的属性_data

_data属性(代理vue实例进行监听和绑定操作)保存了date里面的键值对,

//Vue中的数据代理的基本原理
(1)通过Object.defineProperty()把data对象中的所有属性添加到vm(vue实例)上
(2)给每一个添加到VM中的属性添加一个getter/setter方法
(3)在getter/setter内部去操作(读/写)data属性中对应的属性
 ? ?从而做到你改我以为改

9.基本指令

(1)文本指令

v-html:会进行标签的解析,如<p>hello</p> 打印出 hello

v-text:不会进行标签解析,如<p>hello</p> 打印出 <p>hello</p>

(2)属性指令

02.Vue基本语法 · 语雀

1)属性绑定指令

2)绑定样式

----使用对象语法绑定样式:

----使用三目运算绑定样式:

----直接绑定内联样式

(3)事件指令

v-on:click=“方法1 ” -----简写 @click=“方法1 ”

methods:{

方法1(){ alert(“我爱学习!”)}

}

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<meta name="viewport" content="width=device-width, initial-scale=1.0">
 ? ?<title>Document</title>
 ? ?<script src="../js/vue.js"></script>
</head>
<body>
 ? ?<!-- 
    事件的基本使用:
        1.使用v-on:xxx 或 @xxx 绑定事件,其中xxx是事件名;
        2.事件的回调需要配置在methods对象中,最终会在vm上;
        3.methods中配置的函数,不要用箭头函数!否则this就不是vm了;
        4.methods中配置的函数,都是被Vue所管理的函数,this的指向是vm 或 组件实例对象;
        5.@click="demo" 和 @click="demo($event)" 效果一致,但后者可以传参;
        -->
 ? ?<div id="app">
 ? ? ? ?<p>欢迎您,{{name}}</p>
 ? ? ? ?<button v-on:click="showmsg">我爱学习1</button>
 ? ? ? ? ? ?
 ? ? ? ?<button @click="showmsg1(111,$event)">我爱学习2</button>//又想传参数,又想操作事件
 ? ? ? ? ? ?
 ? ? ? ?<button @click="showinfo">我爱学习3</button>
 ? ?</div>
 ?<script>
 ? ?Vue.config.productionTip=false;
 ? ?var vm = new Vue({
 ? ? ? ?el: '#app',
 ? ? ? ?data: {
 ? ? ? ? ? ?name:"jack"
 ? ? ?  },
 ? ? ? ?methods:{
 ? ? ? ? ? ?showmsg(){
 ? ? ? ? ? ? ? ?alert("我也爱学习!")
 ? ? ? ? ?  }, 
 ? ? ? ? ? ?showmsg1(number,event){
 ? ? ? ? ? ? ? ?alert("我也爱学习!"+number)
 ? ? ? ? ? ? ? ?console.log(event.target.innerText)
 ? ? ? ? ?  },
 ? ? ? ? ? ?showinfo(event){//event是点击的当前事件(dom节点)
 ? ? ? ? ? ? ? console.log(event.target.innerText)//.target目标对象//innerText/innerHtml获取到当前点击的内容
 ? ? ? ? ?  }
 ? ? ?  }
 ?  })
 ?</script>
</body>
</html>
?

(4)事件修饰符

<!DOCTYPE html>
<html lang="en">
<head>
 ? ?<meta charset="UTF-8">
 ? ?<meta name="viewport" content="width=device-width, initial-scale=1.0">
 ? ?<title>Document</title>
 ? ?<script src="../js/vue.js"></script>
 ? ?<style>
 ? ? ? ?*{
 ? ? ? ? ? ?margin-top: 20px;
 ? ? ?  }
 ? ? ?  .one{
 ? ? ? ? ? ?padding: 10px;
 ? ? ? ? ? ?height: 100px;
 ? ? ? ? ? ?width: 200px;
 ? ? ? ? ? ?background: skyblue;
 ? ? ?  }
 ? ? ?  .two{
 ? ? ? ? ? ?height: 30px;
 ? ? ? ? ? ?width: 100px;
 ? ? ? ? ? ?background:goldenrod;
 ? ? ?  }
 ? ? ?  .three{
 ? ? ? ? ? ?padding: 0px;
 ? ? ? ? ? ?width: 200px;
 ? ? ? ? ? ?height: 200px;
 ? ? ? ? ? ?border: 2px solid red;
 ? ? ? ? ? ?overflow: auto;
 ? ? ? ? ? 
 ? ? ?  }
 ? ? ?  .three li{
 ? ? ? ? ? ?margin: 0px;
 ? ? ? ? ? ?width: 200px;
 ? ? ? ? ? ?height:100px;
 ? ? ? ? ? ?background: greenyellow;
 ? ? ?  }
 ? ?</style>
</head>
<body>
 ? ?<!-- 
                Vue中的事件修饰符:
                        1.prevent:阻止默认事件(常用);
                        2.stop:阻止事件冒泡(常用);
                        3.once:事件只触发一次(常用);
                        4.capture:使用事件的捕获模式;
                        5.self:只有event.target是当前操作的元素时才触发事件;
                        6.passive:事件的默认行为立即执行,无需等待事件回调执行完毕;
        -->
 ? ?<div id="app">
 ? ? ? ?<!--prevent:阻止默认事件(常用)-->
 ? ? ? ?<a href="http://www.baidu.com" @click.prevent="showmsg">欢迎您,{{name}}</a></br>
 ? ? ? 
 ? ? ? ?<!--阻止事件冒泡(常用)-->
 ? ? ? ?<div class="one" ?@click="showmsg">
 ? ? ? ? ? ?<div class="two" @click.stop="showmsg" ></div>
 ? ? ? ?</div>
?
 ? ? ? ?<!--once:事件只触发一次(常用)-->
 ? ? ? ?<button @click.once="showmsg">点我吧</button>
?
 ? ? ? ?<!--capture:使用事件的捕获模式;-->
 ? ? ? ?<div class="one" @click.capture="showinfo(2)">
 ? ? ? ? ? ?div1
 ? ? ? ? ? ?<div class="two" @click="showinfo(2)" >
 ? ? ? ? ? ?div2
 ? ? ? ? ? ?</div>
 ? ? ? ?</div>
?
 ? ? ? ?<!-- 只有event.target是当前操作的元素时才触发事件; -->
 ? ? ? ?<div class="one" @click.self="showmsg1($event,1)">
 ? ? ? ? ? ?div1
 ? ? ? ? ? ?<div class="two" @click="showmsg1($event,2)" >
 ? ? ? ? ? ?div2
 ? ? ? ? ? ?</div>
 ? ? ? ?</div>
?
 ? ? ? ?<!--passive:事件的默认行为立即执行,无需等待事件回调执行完毕-->
 ? ? ? ?<ul class="three" @scroll.passive="show">
 ? ? ? ? ? ?<li>1</li>
 ? ? ? ? ? ?<li>2</li>
 ? ? ? ? ? ?<li>3</li>
 ? ? ? ? ? ?<li>4</li>
 ? ? ? ? ? ?<li>5</li>
 ? ? ? ?</ul>
 ? ?</div>
 ? ?<script>
 ? ? ? ?Vue.config.productionTip=false;
 ? ? ? ?var vm = new Vue({
 ? ? ? ? ? ?el: '#app',
 ? ? ? ? ? ?data: {
 ? ? ? ? ? ? ? ?name:"zhangsan"
 ? ? ? ? ?  },
 ? ? ? ? ? ?methods: {
 ? ? ? ? ? ? ? ?showmsg(){
 ? ? ? ? ? ? ? ? ? ?alert("我爱中国!");
 ? ? ? ? ? ? ?  },
 ? ? ? ? ? ? ? ?showinfo(number){
 ? ? ? ? ? ? ? ? ? ?console.log(number)
 ? ? ? ? ? ? ?  },
 ? ? ? ? ? ? ? ?showmsg1(event,number){
 ? ? ? ? ? ? ? ? ? ?console.log(event.target)
 ? ? ? ? ? ? ? ? ? ?console.log(number)
 ? ? ? ? ? ? ?  },
 ? ? ? ? ? ? ? ?show(){
 ? ? ? ? ? ? ? ? ? ?for(var i=0;i<10000;i++){
 ? ? ? ? ? ? ? ? ? ? ? ?console.log(i)
 ? ? ? ? ? ? ? ? ?  }
 ? ? ? ? ? ? ?  }
 ? ? ? ? ?  }
 ? ? ?  })
 ? ?</script>
</body>
</html>

(5)键盘事件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>
<body>
    <!-- 
				1.Vue中常用的按键别名:
							回车 => enter
							删除 => delete (捕获“删除”和“退格”键)
							退出 => esc
							空格 => space
							换行 => tab (特殊,必须配合keydown去使用)
							上 => up
							下 => down
							左 => left
							右 => right

				2.Vue未提供别名的按键,可以使用按键原始的key值去绑定,但注意要转为kebab-case(短横线命名)

				3.系统修饰键(用法特殊):ctrl、alt、shift、meta(就是window键)
							(1).配合keyup使用:按下修饰键的同时,再按下其他键,随后释放其他键,事件才被触发。
							(2).配合keydown使用:正常触发事件。

				4.也可以使用keyCode去指定具体的按键(不推荐)

				5.Vue.config.keyCodes.自定义键名 = 键码,可以去定制按键别名
		-->
<div id="app">
    <p>欢迎您,{{name}}</p></p></p>
    <input type="text" placeholder="请输入用户名" @keydown.huiche="showmsg"></input>
</div>
  <script>
    Vue.config.productionTip=false;
    //Vue.config.keyCodes.huiche = 13;
    var vm = new Vue({
        el: '#app',
        data: {
            name:"zhangsan"
        },
        methods: {
            showmsg(event){
                // alert(event.target.value)
                console.log("keyCode:"+event.keyCode+" key:"+event.key)
            }
        }
    })
  </script>
</body>
</html>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-28 11:10:38  更:2021-11-28 11:11:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 4:21:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码