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.js 作为一门轻量级、易上手的前端渐进式框架,从入门难度和学习曲线上相对其他框架来? ? ? ? ?说算是占据优势的,越来越多的人开始投入 Vue.js 的怀抱,走进 Vue.js 的世界。

二、两个核心点

  1. 响应的数据绑定
    当数据发生改变时,自动更新视图。
    是利用Object.defineProperty中的getter和setter代理数据。
    var obj = {};
    Object.defineProperty(obj,"a",{
    	value:10,  //obj.a值为10
    	writable:false,   //表示不可写
    	enumerable:false,   //表示不可遍历
    	configurable:false,  // 表示不可配置,即不能改变writable:false或者enumerable:false
    	get(){               //   当读取obj.a时会自动调用该函数,不管是什么都返回1000
    		return 1000;
    	},
    	set(){         //   当写入obj.a时会自动调用该函数,不管写什么都写入2000
    		return 2000;
    	}
    });
    

    Vue监控的数据变化就是监控的getter和setter得变化。变化就去重新渲染。

  2. ?视图组件
    UI页面映射出一个组件树
    组件可重用,可维护性好。

三、虚拟DOM

要改变一个DOM节点,才能把视图重新渲染出来。但这样会发生重排重绘,十分耗费性能。
虚拟DOM就是使用js去模拟一个节点。把js封装出来,变为一个真实的DOM。(使用js对象的嵌套形式模仿出一个html文档),通过底层的算法可以让重排重绘只发生在局部。优化页面。

//  模仿实现
function VElement(tagName,prop,children){  //参数为( "",{},[] ) 
	// 判断是不是一个VElement的一个实例
	if ( !(this instanceof VElement) ) {
		return new VElement(tagName,prop,children);
	}
	//  假如用户没有属性prop,就没有给参数prop,进行兼容性处理
	if( Object.prototype.toString.call(prop) === "[object Array]" ){
		children = prop;
		prop = {};
	}
	this.tagName = tagName;
	this.prop = prop;
	this.children = children;
	var count = 0;  //  用于记录虚拟节点个数
	this.children.forEach(function(child,index){
		if(child instanceof VElement){
			// 如果子节点是一个虚拟节点,让总节点数加上子节点的子子节点数
			count += child.count;
		}
		count ++;
	});
	this.count = count;
}
var dom = VElement("div",[VElement("div",["Vue牛逼"])]);
console.log(dom);
// 结果  虚拟DOM   相当于:<div><div>Vue牛逼</div></div>
// VElement {
//   tagName: 'div',
//   prop: {},
//   children: [ VElement { tagName: 'div', prop: {}, children: [Object], count: 1 } ],
//   count: 2 }
VElement.prototype.render = function(){
	//rander函数将虚拟DOM转换为真实DOM
	var dom = document.createElement(this.tagName);
	var children = this.children;
	var prop = this.prop;
	for(var item in prop){
		dom.setAttribute(item,prop[item]);
	}
	children.forEach( function(child,index){
		if(child instanceof VElement){
			var childDom = child.render();
		}else{
			var childDom = document.createTextNode(child);
		}
		dom.appendChild(childDom);
	} );
	return dom;
};
console.log(dom.render());
//  结果
// <div>
//  	<div>Vue牛逼</div>
// </div>

?四、Vue实例

  1. 数据绑定
  2. 计算属性与侦听器
  3. 属性绑定
  4. 条件渲染 v-if v-show
  5. 列表渲染 v-for
  6. 绑定事件 事件修饰符 表单
    <!DOCTYPE html>
    <html>
    <head>
    	<title>Vue</title>
    </head>
    <body>
    
    	<div id="demo">
    		{{name}}   <!-- 数据绑定 -->
    		{{changeName}}     <!-- 绑定计算属性的changeName -->
    		<!-- 通过v-bind:命令绑定属性名 -->
    		<!-- 其中class和style比较特殊,要使用数组形式:v-bind:class="[class1]" -->
    		<!-- 也可以通过对象的形式:v-bind:class="{class1:classBoolean}",其中class1是class名,而classBoolean才是绑定的变量,为true时才将class1绑定上  (实现添加或删除class) -->
    		<span v-bind:data="message" v-bind:id="id">{{name}}</span>
    		<!-- v-show 控制节点显示或隐藏,ifshow是绑定的数据,为true时显示,false时内部设为display:none -->
    		<!-- v-if也是控制节点显示隐藏,但v-if为false时,是删除节点 -->
    		<!-- 频繁切换时,考虑重拍重绘,v-if会更浪费性能 -->
    		<div v-show='ifshow'>条件渲染演示</div>
    		<!-- items是一个数组,会被v-for遍历,item就是遍历的结果 -->
    		<span v-for="item in items">{{item.title}}</span>
    		<!-- v-on绑定事件,click为事件名,click1为回调函数,写在methods内 -->
    		<button v-on:click="click1">点击</button>
    		<!-- 事件修饰符,在事件的回调函数后添加一个.enter,代表只有按下回车键才会触发该事件 -->
    		<input type="text" name="" v-on:keyup.enter="keyup1">
    		表单,初始化时,会将value的值默认填入input框
    		<input type="text" name="" v-model="value">
    
    	</div>		
    
    	<script type="text/javascript" src="https://vuejs.org/js/vue.js"></script>
    	<script type="text/javascript">
    		//在vue当中,需要一个dom节点挂载Vue,并且vue语法只在此节点内生效
    		var vm = new Vue({
    			el: "#demo",   // el对应dom节点的id,就把Vue挂载在了dom节点上了
    			data:{   // 数据绑定   所有数据都会绑定到实例vm上
    				name:"tanjw",
    				message : 123,
    				id:"demo1",
    				ifshow:false,
    				items:[{
    					title:"18"
    				},{
    					title:"20"
    				}],
    				value:123
    			},
    			//  当name变化时,就会在computed内找一些相关属性
    			computed:{  //   计算属性,内部写一些函数
    				changeName: function(){  //  当通过控制台改变vm实例name时,changName也会随着变化,监控name的变化
    					return "my name is " + this.name;
    				}
    			},
    			methods:{
    			// 专门处理异步回调函数
    				click1:function(){
    					console.log(this);
    				},
    				keyup1:function(){
    					console.log(this.value);
    		})
    	</script>
    </body>
    </html>
    

    五、Vue?模板语法使用?

????????Html

????????使用 v-html 指令用于输出 html 代码:

<div id="app">
    <div v-html="message"></div>
</div>
    
<script>
new Vue({
  el: '#app',
  data: {
    message: '<h1>菜鸟教程</h1>'
  }
})
</script>

属性

HTML 属性中的值应使用 v-bind 指令。?

以下实例判断 use 的值,如果为 true 使用 class1 类的样式,否则不使用该类:

v-bind 指令:?

<div id="app">
  <label for="r1">修改颜色</label><input type="checkbox" v-model="use" id="r1">
  <br><br>
  <div v-bind:class="{'class1': use}">
    v-bind:class 指令
  </div>
</div>
    
<script>
new Vue({
    el: '#app',
  data:{
      use: false
  }
});
</script>

?

用户输入

在 input 输入框中我们可以使用 v-model 指令来实现双向数据绑定:

<div id="app">
    <p>{{ message }}</p>
    <input v-model="message">
</div>
    
<script>
new Vue({
  el: '#app',
  data: {
    message: 'Runoob!'
  }
})
</script>

?

Vue.js 条件语句

条件判断

v-if

条件判断使用 v-if 指令:

v-if 指令

在元素 和 template 中使用 v-if 指令:

<div id="app">
    <p v-if="seen">现在你看到我了</p>
    <template v-if="ok">
      <h1>菜鸟教程</h1>
      <p>学的不仅是技术,更是梦想!</p>
      <p>哈哈哈,打字辛苦啊!!!</p>
    </template>
</div>
    
<script>
new Vue({
  el: '#app',
  data: {
    seen: true,
    ok: true
  }
})
</script>

?

v-else

可以用 v-else 指令给 v-if 添加一个 "else" 块:

v-else 指令

随机生成一个数字,判断是否大于0.5,然后输出对应信息:

<div id="app">
    <div v-if="Math.random() > 0.5">
      Sorry
    </div>
    <div v-else>
      Not sorry
    </div>
</div>
    
<script>
new Vue({
  el: '#app'
})
</script>

v-show

我们也可以使用 v-show 指令来根据条件展示元素:

<h1 v-show="ok">Hello!</h1>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 11:54:58  更:2021-08-30 11:59:23 
 
开发: 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年11日历 -2024/11/23 13:01:04-

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