vue基础入门笔记

js获取元素值方式:

document.getElementById("xxidxx").innerHTML

 

插值:

{{msg}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<!--mvvm-->
<body>
    <div id="app">
        <!--三种类型-->
        <!--1、直接赋值-->
        <p>{{msg}}</p>

        <!--根据bool条件判断赋值-->
        <!-- 三元运算符 -->
        <p>{{true?"yes":"no"}}</p>

        <!--计算-->
        <p>{{3.1415926*2165}}</p>
    </div>
    <script>
        var vm=new  Vue({
            el:'#app',
            data:{
                msg:'aaaaaaaaa'
            }
        })
    </script>
</body>


</html>

 

 

按钮事件绑定:

v-on:click和methods:
event.keyCode
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
    <div id="app">

        <p>{{msg}}</p><br>
        <button  v-on:click="fun1('click')">vue click</button>

    </div>
    <script>
        var vm=new  Vue({
            el:'#app',
            data:{
                msg:'msg vue'
            },
            methods:{
                fun1:function (message) {
                    alert(message);
                    this.msg=message

                }
            }

        })
    </script>
</body>
</html>

 

 

输入,键盘按键:

v-on:keydown

 

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title>v-on:keydown</title>
		<script src="js/vuejs-2.5.16.js"></script>
	</head>

	<body>
		<div id="app">
			Vue:<input type="text" v-on:keydown="fun($event)">
			<hr/>
			传统JS:<input type="text"  onkeydown="showKeyCode()"/>
		</div>
	</body>
	<script>
		//view model
		new Vue({
			el:"#app",
			methods:{
			    /* $event 它是vue中的事件对象  和我们传统js的event对象是一样的  */
			    fun:function(event){
                    var keyCode = event.keyCode;
					/*输入的为数字控制,字节码为48-57*/
                    if(keyCode < 48  || keyCode > 57){
                        //不让键盘的按键起作用
                        event.preventDefault();
                    }
				}
			}
		});


		//传统js的键盘按下事件
		function showKeyCode(){
			//event对象和我们的document对象以及window对象是一样的,可以不用定义直接使用
			var keyCode = event.keyCode;
			if(keyCode < 48  || keyCode > 57){
				//不让键盘的按键起作用
				event.preventDefault();
			}
			// alert(keyCode);
			// if(event.keyCode == 13){
			//     alert("你按的是回车");
			// }
		}
	</script>
	
	

</html>

 

 

鼠标控制,事件传播:移入移出,以及阻止div关联事件的触发例如文本域textarea,无需触发div

v-on:mouseover  
event.stopPropagation();
<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title>v-on:mouseover</title>
		<style>
			#div {
				background-color: red;
				width:300px;
				height:300px;
			}
		</style>
		<script src="js/vuejs-2.5.16.js"></script>
	</head>

	<body>
		<div id="app">
			<div @mouseover="fun1" id="div">
				<textarea @mouseover="fun2($event)">这是一个文件域</textarea>
			</div>

			<!--<div onmouseover="divmouseover()" id="div">
				<textarea onmouseover="textareamouseover()">这是一个文件域</textarea>
			</div>-->
		</div>
	</body>
	<script>
		//view model
        /**
		 * @事件名称  就是  v-on:事件名称的简写方式
		 * @mouseover它就等同于v-on:mouseover
         */
		new Vue({
			el:"#app",
			methods:{
				fun1:function(){
				    alert("鼠标悬停在div上了");
				},
				fun2:function(event){
				    alert("鼠标悬停在textarea上了");
                    event.stopPropagation();
				}
			}
		});


		//传统的js方式
		function divmouseover(){
		    alert("鼠标移动到了div上了");
		}

		function textareamouseover(){
		    alert("鼠标移动到了textarea上了");
		    event.stopPropagation();
		}
	</script>

</html>

 

表单验证
@submit.prevent
//表单验证必须有一个明确的boolean类型返回值
//在应用验证方法时必须加上 return  方法名称
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单校验</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
    <div id="app">
       <!-- <form action="www.baidu.com" method="get" @submit.prevent="return fun1()">
            姓名:<input type="text" name="username"/><br>
            密码:<input type="text" name="password"/><br>
            <input type="submit" value="表单提交"/>
        </form>-->
        <form action="www.baidu.com" method="get" onsubmit="return fun1">
            姓名:<input type="text" name="username"/><br>
            密码:<input type="text" name="password"/><br>
            <input type="submit" value="表单提交"/>
        </form>
    </div>


<script>
    var vm=new Vue({
        el:'#app',
        methods:{
            fun1:function () {
                alert("22");
                return true;
            }
        }
    })

</script>
</body>
</html>

 

 

 

@mouseover.stop

event.stopPropagation();和@mouseover.stop相等,阻止事件传播

 

 

v-on:按键修饰符

如按了回车键,删除键等出发function

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>

<div id="app">
    根据按键盘按键转字节码触发方法:<input type="text" name="code" @keydown.enter="fun1()"/>
</div>
<script>
    var vm=new Vue({
        el:"#app",
        methods:{
            fun1:function () {
                alert("@keydown.enter")
            }
        }
    })
</script>
</body>
</html>

 

 

v-text 和 v-html的区别

等同于

传统js的innerText和innerHTML

text不会去解析标签,html会解析渲染

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
    <div id="app">
        <div v-text="msg"></div>
        <div v-html="msg"></div>
    </div>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                msg:"<p>my vue message</p>"
            }
        })
    </script>
</body>
</html>

 

补充传统js方式

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>v-text与v-html</title>
		<script src="js/vuejs-2.5.16.js"></script>
	</head>
	<body>
		<div id="app">
			<div v-text="message"></div>
			<div v-html="message"></div>
			<!--<div id="div1"></div>
			<div id="div2"></div>-->
		</div>
	</body>
	<script>
		//view model
		new Vue({
			el:"#app",
			data:{
			    message:"<h1>Hello Vue</h1>"
			}
		});

		//传统js的innerText和innerHTML
		window.onload = function(){
		    document.getElementById("div1").innerHTML="<h1>Hello</h1>";
            document.getElementById("div2").innerText="<h1>Hello</h1>";
		}
	</script>
</html>

 

 

v-bind的使用:用于设置html标签属性
不能用插值表达式,语法错误
v-bind可以省略,但是冒号:不能省略
v-bind:size等价于   :size="mySize"
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-bind</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
    <div id="app">
        <!--html标签,传统方式,设置属性-->
        <h3><font size="5" color="#7fffd4">aaaaa</font></h3>

        <!--vue插值表达式方式,语法错误-->
        <!--<h3><font size="{{mySize}}" v-bind:color="{{col}}">bbb</font></h3>-->
        <!--vue正确方式 v-bind可以省略-->
        <h3><font v-bind:size="mySize" v-bind:color="col">ccc</font></h3>
        <h3><font :size="mySize" :color="col">dddddddd</font></h3>
    </div>
    <script>
        var vm=new Vue({
            el:"#app",
            data:{
                col:"red",
                mySize:8
            }
        })
    </script>
</body>
</html>

 

 

 

vue对象数据

v-model

分输入框和非输入框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>

    <div id="app">
        <!--非输入标签-->
        <p>{{user.username}}</p><br>
        <p>{{user.password}}</p><br>

        <!--普通模式-->
        <input type="text" name="username1" value="11"><br>
        <!--输入标签赋值-->
        <input type="text" name="username2" v-model:value="user.username"><br>
        <input type="text" name="password" v-model:value="user.password">

    </div>
    <script>
        new Vue({
            el:"#app",
            data:{
                user:{
                    username:"zhangsan",
                    password:"abc132"
                }

            },
            methods:{}
        })
    </script>
</body>
</html>

 

 

 

 

v-for遍历数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-for</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
    <div id="app">
        <ul>
            <li v-for="(item,index) in arr">索引:{{index}},元素:{{item}}</li>
        </ul>

    </div>
    <script>
        new Vue({
            el:"#app",
            data:{
                arr:["zhangsan","lisi","wangwu"]
            }
        })
    </script>
</body>
</html>

 

v-for遍历对象

例1:单个对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-for遍历数组</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
    <div id="app">
        <ul>
            <li v-for="(key,value) in prd">{{key}}===>{{value}}</li>
        </ul>
    </div>

<script>
    new Vue({
        el:"#app",
        data:{
            prd:{
                username:"zhangsan",
                password:"das",
                age:12,
                adress:"hangzhou"
            }
        }
    })
</script>
</body>
</html>

 

例2:对象数组

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>对象数组</title>
    <script src="js/vuejs-2.5.16.js"></script>
</head>
<body>
    <div id="app">
        <table border="1">
            <tr>
                <td>索引</td>
                <td>姓名</td>
                <td>年龄</td>
                <td>地址</td>
            </tr>
            <tr v-for="(product,index) in products">
                <td>{{index}}</td>
                <td>{{product.username}}</td>
                <td>{{product.age}}</td>
                <td>{{product.adress}}</td>
            </tr>
            <!--<li v-for="(product,index) in products"></li>-->
        </table>
    </div>

    <script>
        new Vue({
            el:"#app",
            data:{
                products:[
                    {username:"zhang1",age:19,adress:"shanghai"},
                    {username:"lisi",age:12,adress:"hangzhou"},
                    {username:"xiongda",age:13,adress:"guangzhou"},
                    {username:"xionger",age:11,adress:"beijing"},

                ]
            }
        })
    </script>
</body>
</html>

 

 

 

v-if操控dom元素的显示隐藏
v-if与v-show动态控制dom元素显示隐藏

手段:

v-if是动态的向DOM树内添加或者删除DOM元素;v-show是通过设置DOM元素的display样式属性控制显隐;

编译过程:

v-if切换有一个局部编译/卸载的过程,切换过程中合适地销毁和重建内部的事件监听和子组件;v-show只是简单的基于css切换;

 

 

 

设置都为true时编译:

 

 

 

切换v-if:

编译后<h3>标签直接被删除:

 

 

切换v-show:

编译后:v-show的<h3>标签还在,style变成了display:none  即不显示

 

总结:

编译条件:

v-if是惰性的,如果初始条件为假,则什么也不做;只有在条件第一次变为真时才开始局部编译(编译被缓存?编译被缓存后,然后再切换的时候进行局部卸载); v-show是在任何条件下(首次条件是否为真)都被编译,然后被缓存,而且DOM元素保留;
性能消耗:

v-if有更高的切换消耗;v-show有更高的初始渲染消耗;
使用场景:

v-if适合运营条件不大可能改变;v-show适合频繁切换。
 

 

vuejs生命周期

 

 

1.vue的生命周期

简单的说生命周期就是事物从产生到消失的一个时间过程。那么vue的生命周期就是从其被创建到销毁的过程,其中包含了开始创建、初始化数据、编译模板、挂载dom(渲染) ,渲染->更新->渲染、销毁(卸载)等一系列过程。

那么其中的钩子函数都担负着自己的职责,较为常用的就是created和mounted函数,可以在函数中编写相关的业务逻辑。

2.钩子函数

beforeCreate

在实例初始化之后,数据观测和事件、生命周期初始化配置之前被调用。

created

实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测,属性和方法的运算,事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

beforeMount

在挂载开始之前被调用:相关的 render 函数首次被调用,此时有了虚拟DOM。

mounted

el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子,渲染为真实DOM。

beforeUpdate

在数据更新之前时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。

updated

由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。

值得注意的是:该钩子在服务器端渲染期间不被调用。

beforeDestroy

实例销毁之前调用。此时,实例仍然是可用的。

destroyed

vue 实例销毁后调用。调用后,vue 实例指示的所有东西都会解绑,所有的事件监听器会被卸载移除,所有的子实例也会被销毁。
 

<!DOCTYPE html>
<html>

	<head>
		<meta charset="utf-8" />
		<title>vuejs生命周期</title>
		<script src="js/vuejs-2.5.16.js"></script>
	</head>

	<body>
		<div id="app">
			{{message}}
		</div>
	</body>
	<script>
		var vm = new Vue({
			el: "#app",
			data: {
				message: 'hello world'
			},
			beforeCreate: function() {
				console.log(this);
				showData('创建vue实例前', this);
			},
			created: function() {
				showData('创建vue实例后', this);
			},
			beforeMount: function() {
				showData('挂载到dom前', this);
			},
			mounted: function() {
				showData('挂载到dom后', this);
			},
			beforeUpdate: function() {
				showData('数据变化更新前', this);
			},
			updated: function() {
				showData('数据变化更新后', this);
			},
			beforeDestroy: function() {
				vm.test = "3333";
				showData('vue实例销毁前', this);
			},
			destroyed: function() {
				showData('vue实例销毁后', this);
			}
		});

		function realDom() {
			console.log('真实dom结构:' + document.getElementById('app').innerHTML);
		}

		function showData(process, obj) {
			console.log(process);
			console.log('data 数据:' + obj.message)
			console.log('挂载的对象:')
			console.log(obj.$el)
			realDom();
			console.log('------------------')
			console.log('------------------')
		}
		// vm.message = "good...";
		vm.$destroy();
	</script>

</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值