vue 知识点总结

vue 知识点总结

目录 vue 知识点总结一,实现第一个Vue页面二,通过{{}} 表达式在视图层里渲染数据,在刷新页面时,会出现闪烁现象。三,v-if与v-show的异同和使用场景。四,v-model与v-bind。五,v-on与methods六,v-for以及v-for中的key值七,事件修饰符八,过滤器 私有过滤器 filters全局过滤器 filter九,自定义指令十,键盘修饰符十一,生命周期

一,实现第一个Vue页面

01.下载文件并引入 引入之后,在我们浏览器的内存中,多了一个Vue构造函数。

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17-beta.0/vue.min.js"></script>

02.实例化vue应用程序 new Vue({参数配置})

03.通过配置el去关联视图层 ---即用户能看到的页面

04.通过配置data去设置相关的参数属性,即储存数据

05.通过{{}} 表达式在视图层里渲染数据。

<!-- 这是 MVVM中的 V view 视图 -->
<div class="app">
		<h1>{{ msg }}</h1>
	</div>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17-beta.0/vue.min.js"></script>
<script type="text/javascript">
 	//这是 MVVM中的 VM viewmodel 视图模型
 	let vm = new Vue({
 		//el 就是element 元素的意思 ,其作用:与页面关联的
 		el:'.app',
 		//这里data就是MVVM中的 M model 数据模型,专门储存数据的
 		data:{
 			msg:'hello world'
 		}
 	})
</script>

二,通过{{}} 表达式在视图层里渲染数据,在刷新页面时,会出现闪烁现象。

解决: 	① 使用 v-cloak ,设置样式。

[v-cloak]{display: none;}
<h1 v-cloak>{{msg}}</h1>		

		②  使用 v-text或者v-html

<h2 v-text = 'msg'>=====</h2>
<h2 v-html = 'msg'>=====</h2>

区别:	后者会覆盖元素里原本的内容

三,v-if与v-show的异同和使用场景。

v-if =‘ true或者false ’

v-show=‘ true或者false ’

相同点:都可以动态控制元素显示和隐藏
区别:     	 v-if 将整个dom元素添加或者删除  	 v-show 显示和隐藏
性能消耗:	 v-if 有更高的切换的消耗          		 v-show 有更高的渲染消耗
使用场景: 	 v-if 适合运营条件改变不大的时候 	 v-show 适合频繁切换

四,v-model与v-bind。

v-model 用于 input 标签,在input元素上进行双向绑定数据

v-bind用于单向绑定属性和数据 ,其缩写为“ : ” 也就是v-bind:id  === :id  

五,v-on与methods

<div id="App">
    	// mygame 是属性值
    <p>{{mygame}}</p>
 		// v-on:click="clickme('do you like game')" v-on 监听事件,click是点击事件类型
    <button v-on:click="clickme('do you like game ?')" >no</button>
		// @click事件监听简写@click="clickme('yes iam like game')"
    <button @click="clickme('yes i am like game')" > yes</button>
</div>
	var App = new Vue({
        el: "#App",
        data: { //数据区data
            mygame: "超级马里奥",
        },
        methods: { //函数区 methods
            clickme: function (value) {
                this.mygame = value;
            },
        },
    });

六,v-for以及v-for中的key值

v-for 根据一组数组的选项列表进行渲染
语法: v-for = "item in arr"
item: 数组里的每一个元素
arr: 数组 

<p v-for='item in list' :key='item.id'>
	<input type="checkbox">
	{{item.id}}==={{item.name}}
</p>
let vm = new Vue({
	el:'#app',
	data:{
		list:[
			{id:1,name:'小明'},
			{id:2,name:'小红'},
			{id:3,name:'小黑'},
			{id:4,name:'小白'},
		]
	},
})

:key=‘item.id’ ==> 便于能跟踪每个节点的身份,从而重用和重新排序现有元素,需要为每项提供一个唯一

			key 属性。理想的 key 值是每项都有的且唯一的 id。 但它的工作方式类似于一个属性,

			所以你需要用 v-bind 来绑定动态值 

七,事件修饰符

  • .stop 阻止冒泡

  • .prevent 阻止默认事件

  • .capture 添加事件侦听器时使用事件捕获模式

  • .self 只当事件在该元素本身(比如不是子元素)触发时触发回调

  • .once 事件只触发一次

      <div id="app">
      		<!-- .stop阻止别人的冒泡 点击btn时,只会触发btn()事件,
      				而不会因为冒泡而触发div()事件-->
      	<div class="myDiv" @click = 'div()'>
      		<button @click.stop = 'btn'>点击</button>
      	</div>
      		<!-- .prevent  阻止默认事件  点击a标签时,页面不会跳转到http://www.baidu.com-->
      	<a href="http://www.baidu.com" @click.prevent = 'aClick'></a>
      		<!-- .capture    添加事件侦听器时使用事件捕获模式  触发顺序 
      						点击btn时,div()方法先触发,btn()方法后触发-->
      	<div class="myDiv" @click.capture = 'div()'>
      		<button @click = 'btn'>点击</button>
      	</div>
      		<!-- .self  只会阻止自身的冒泡行为
              		点击btn时,会触发btn()和 outDiv()事件,而不会触发 Div()事件-->
      	<div class="outDiv" @click = 'outDiv()'>
      		<div class="myDiv" @click.self = 'div()'>
      			<button @click = 'btn()'>点击</button>
      		</div>
      	</div>
      		<!-- .once  事件只触发一次  阻止一次页面跳转事件-->
      	<a href="http://www.baidu.com" @click.prevent.once = 'aClick'></a>
      </div>
    

八,过滤器

Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号值

和 v-bind 表达式。过滤器应该被添加在 JavaScript 表达式的尾部,由“管道”符号指示: 

过滤器的定义语法:
	在html中 过滤器调用时候的格式	{{ item.name | 过滤器的名称 }} 
	在js中定义过滤器  Vue.filter('过滤器的名称',function(){})
	函数里面的参数	第一个参数永远是需要过滤的数据,已经规定好了
					Vue.filter('过滤器的名称',function(data){})
					return 过滤器的名称	

注意:	当有局部和全局两个名称相同的过滤器时候,会以就近原则进行调用,

		即:局部过滤器优先于全局过滤器被调用!			

私有过滤器 filters

1.HTML元素

<td>{{item.ctime | dataFormat()}}</td>

2.私有 filters 定义方式:

filters: { // 私有局部过滤器,只能在 当前 VM 对象所控制的 View 区域进行使用

    'dataFormat' function (dateStr) {
      // 根据给定的时间字符串,得到特定的时间
      var dt = new Date(dateStr);

      //   yyyy-mm-dd
      var y = dt.getFullYear();
      //先转字符串,再补全
      var m = (dt.getMonth() + 1).toString().padStart(2,'0');
      var d = dt.getDate().toString().padStart(2,'0');

      // 字符串补全: padStart()用于头部补全,padEnd()用于尾部补全。
      padStart(参数一,参数2)	 
      				参数一: 补全完毕之后字符串的总长度,
      				参数2,用来补全的字符串。

        var h = dt.getHours().toString().padStart(2,'0');
        var mm = dt.getMinutes().toString().padStart(2,'0');
        var s = dt.getSeconds().toString().padStart(2,'0');

        return `${y}-${m}-${d} ${h}:${mm}:${s}`
    }
  }

全局过滤器 filter

3.全局 filter定义方式:

Vue.filter('dateFormat', function (dateStr) {
      // 根据给定的时间字符串,得到特定的时间
      var dt = new Date(dateStr);

      //   yyyy-mm-dd
      var y = dt.getFullYear();
      //先转字符串,再补全
      var m = (dt.getMonth() + 1).toString().padStart(2,'0');
      var d = dt.getDate().toString().padStart(2,'0');

      // 字符串补全: padStart()用于头部补全,padEnd()用于尾部补全。
      padStart(参数一,参数2)	 
      				参数一: 补全完毕之后字符串的总长度,
      				参数2,用来补全的字符串。

        var h = dt.getHours().toString().padStart(2,'0');
        var mm = dt.getMinutes().toString().padStart(2,'0');
        var s = dt.getSeconds().toString().padStart(2,'0');

        return `${y}-${m}-${d} ${h}:${mm}:${s}`

    });

九,自定义指令

1.HTML元素

<input type="text" v-model="searchName" v-focus v-color="'red'" v-font-weight="900">

2.自定义全局指令和局部指令:

//自定义全局指令 v-focus,为绑定的元素自动获取焦点:
     Vue.directive('focus', {
        inserted: function (el) { // inserted 表示被绑定元素插入父节点时调用
            el.focus();
        }
    });

//自定义局部指令 v-color 和 v-font-weight,为绑定的元素设置指定的字体颜色 和 字体粗细:
      directives: {
          color: { // 为元素设置指定的字体颜色
             bind(el, binding) {
           		 el.style.color = binding.value;
         	 }
          },
          'font-weight': function (el, binding2) { 
        	 // 自定义指令的简写形式,等同于定义了 bind 和 update 两个钩子函数
          	 el.style.fontWeight = binding2.value;
          }
      }

		//定义全局的指令 v-focus
		//注意:调用时,必须要在指令名称加上v-前缀
		//		定义时 名称 ---> focus
		//参数1:指令的名称
		//参数2:是一个对象,在这个对象上有一些指令相关的函数,
		//			这些函数可以再特定的阶段执行相关的操作
		Vue.directive('focus',{
			bind:function (el) {//每当指令绑定到元素身上时,会立即执行这个bind函数,只执行一次
				el.focus();
				//元素刚绑定指令的时候,只是解析到内存当中了,还没有插入到DOM中
				//和颜色相关的可以在bind中执行
			},
			inserted:function (el) {//当元素插入到Dom中的时候,会执行inserted函数,只执行一次
				el.focus();
				//和js行为相关的操作,最好在inserted中执行,防止不生效。
			},
			update:function (el) {//当DOM节点更新的时候,会执行,会触发多次
				// body...
			}
		})

十,键盘修饰符

1.常见键盘修饰符

<!-- 只有在 keyCode 是 13 时调用 vm.submit() -->
<input v-on:keyup.13="submit">
<input v-on:keyup.enter="submit">
//简写
<input @keyup.enter="submit">

全部的按键别名:

  • enter
  • tab
  • delete
  • esc
  • space
  • up
  • down
  • left
  • right

2.自定义键盘修饰符

通过Vue.config.keyCodes.名称 = 按键值来自定义案件修饰符的别名:

Vue.config.keyCodes.f2 = 113;

使用自定义的按键修饰符:

<!-- 只有在 keyCode 是 113 时调用 vm.add() -->
<input type="text" v-model="name" @keyup.f2="add">

十一,生命周期

  • 什么是生命周期:从Vue实例创建、运行、到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期!
  • 生命周期钩子:就是生命周期事件的别名而已;
  • 生命周期钩子 = 生命周期函数 = 生命周期事件

1.html元素

<button @click = "msg='no'">修改msg</button>
<h1 id="h1"> {{msg}} </h1>

2.生命周期

	let vm = new Vue({
			el:'#app',
			data:{
				msg:'ok'
			},
			methods:{
				show(){
					console.log('执行了show方法')
				}
			},
			beforeCreate(){//第一个生命周期函数 表示在实例创建出来之前,会执行他
			 	console.log(this.msg);
			 	this.show();
				//说明:data和methods中的方法还没有初始化
			},
			created(){//第二个生命周期函数 
				console.log(this.msg);
				this.show();
				//说明:data和methods中的方法已经初始化
			},
			beforeMount(){//第三个生命周期函数 表示模板已经在内存当中编辑完了,尚未渲染在页面当中
				console.log(document.getElementById('h1').innerText);
				// this.show();
				//说明:在内存当中编辑完了,尚未渲染在页面当中
			},
			mounted(){//第四个生命周期函数 表示模板已经在渲染到页面当中
				console.log(document.getElementById('h1').innerText);
				// this.show();
				//说明:模板已经在渲染到页面当中
			},
			beforeUpdate(){//第五个生命周期函数
				console.log("页面上的内容"+document.getElementById('h1').innerText);
				console.log("内存data里面的内容"+this.msg)
				//说明:显示在页面当中的数据还未更新,而data的数据已经更新
			},
			updated(){//第六个生命周期函数
				console.log("页面上的内容"+document.getElementById('h1').innerText);
				console.log("内存data里面的内容"+this.msg)
				//说明:显示在页面当中的数据和data的数据已经同步更新
			},
			beforeDestroy(){//第七个生命周期函数,
				//实例销毁之前调用。在这一步,实例仍然完全可用。
			},
			destroyed(){//第八个生命周期函数,
				//Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,
						所有的事件监听器会被移除,所有的子实例也会被销毁。
			},
		})

猜你喜欢

转载自blog.csdn.net/weixin_42595284/article/details/83050804