Vue.js初学笔记

Posted GeekerNote

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue.js初学笔记相关的知识,希望对你有一定的参考价值。

Vue.js初学

因为听说Vue.js是最容易上手的热门SPA框架,所以笔者试着借助B站某up主翻录上传的《【web前端】传智 2018 vue.js基础+项目实战》视频教程的思路,边学习边练习,期望尽早入门。此处贴出练习代码和注解以及一部分的自我理解,希望对跟我一样的新手有入门方面的帮助。

1.变量输出和事件绑定处理

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.min.js"></script>
</head>
<body>

    <div id="app"> <!-- 一个由Vue接管的区域 -->
        <p>{{message}}</p><!-- 使用Vue的系统指令来输出变量 -->
        <button v-on:click="change">改变值</button><!-- v-on指令绑定和处理元素的事件 -->
    </div> <!-- /一个由Vue接管的区域 -->

    <script>
    //实例化一个Vue对象
    var v = new Vue({
        el:"#app",//el指定Vue接管区域的标签
        data:{//data中指定变量存储各种数据
            message:"Hello Vue.js"
        },
        methods:{//methods下存储各种函数,用于事件处理或其他调用
            change:function(){
                this.message += "1";
            }
        }
    })
    
</script>
</body>
</html>
点击按钮改变message的值

Vue在此处可以理解为将一个HTML代码区块对应了一个类的实例(也就是一个对象),通过代码区块内特殊指令的识别处理实现数据变量的读写‘双向绑定以及事件的绑定、映射。


Vue的基本理解

2.v-text和v-html

v-text和v-html两者就像是DOM操作中的innerText和innerHTML一样,一个输出纯文本一个输出渲染HTML。

<div id="app">
    <span v-text="message"></span><!--v-text:输出纯文本-->
    <span v-html="message"></span><!--v-html:输出html-->
    <button v-on:click="change">改变值</button>
</div>
<script>
    var v = new Vue({
        el:"#app",
        data:{
            message:"<h2>Hello Vue.js<h2>"//当变量中有HTML标签
        },
        methods:{
            change:function(){
                this.message += "1";
            }
        }
    })
</script>
v-text和v-html

3.v-bind标签属性赋值

笔者的理解:双花括号变量名的写法适合于输出到HTML DOM的text节点(也就是HTML标签之外的文本部分),v-text和v-html属性所做的是类似的操作,而当你想要将变量的值放到HTML标签的属性中去时,就需要使用v-blind:标签属性名的写法。

<div id="app">
    <input type="button" v-bind:value="message"><!--v-bind为标签属性赋值Vue中设定的变量-->
    <input type="button" :value="message"><!--v-bind简写法-->
</div>
<script>
    var v = new Vue({
        el:"#app",
        data:{
            message:"Hello Vue.js"
        }
    })
</script>
v-bind标签属性赋值

4.v-model数据双向绑定

既然让HTML代码区块对应了Vue对象实例,那么好的做法是DOM中的数据与该对象实例中的数据始终保持一致:无论是在像表单元素这样的DOM中输入,还是脚本动态改变都及时的反映到Vue对象实例的相应变量上,而Vue对象实例的相应变量值的改变会实时更新到DOM的表现中——这就是数据双向绑定吧!

对于数据双向绑定的具体实现不是很清楚,但是这样的特性的确可以减少DOM操作的代码书写。

<div id="app">
    <form action="#">
        用户名:<input type="text" v-model="user.uname"><br><!--v-model实现数据双向绑定-->
        密码:<input type="password" v-model="user.upwd"><br>
        <input type="submit" value="注册" v-on:click="userSubmit">
    </form>
</div>
<script>
    var v = new Vue({
        el:"#app",
        data:{
            user:{//基于JS的优势,data内部的成员可以是一个对象
                uname:"",
                upwd:""
            }
        },
        methods:{
            userSubmit:function(){
                alert(this.user.uname + "   pwd:"  + this.user.upwd);//this代表当前vue实例对象
            }
        }
    })
</script>
v-model数据双向绑定

5.v-for遍历输出数组

v-for适用于数组的遍历输出。

5-1.输出普通的数组

<div id="app">
    <ul>
        <li v-for="itm in list">{{itm}}</li><!--输出数组元素-->
    </ul>
</div>
<script>
    var v = new Vue({
        el:"#app",
        data:{
            list:[1,2,3,4]
        }
    })
</script>
v-for遍历输出数组

5-2.输出index

<div id="app">
    <ul>
        <li v-for="(itm,index) in list">{{index}}-{{itm}}</li><!--输出index-->
    </ul>
</div>
<script>
    var v = new Vue({
        el:"#app",
        data:{
            list:[1,2,3,4]
        }
    })
</script>
输出index

5-3.输出对象数组元素的key-value

如果v-for的数组元素是特定结构的对象,可以使用如下的方式进行遍历输出。

<div id="app">
    <ul>
        <li v-for="(itm,key) in user">{{key}}-{{itm}}</li><!--输出key-value-->
    </ul>
</div>
<script>
    var v = new Vue({
        el:"#app",
        data:{
            user:{name:"张三",sex:"男"}
        }
    })
</script>
输出key-value

6.v-if和v-show

  • v-if判断变量或表达式是否为true,true渲染该DIV,false则不渲染该DIV或DON中移除该DIV

  • v-show通过判断来控制该DIV的display属性为true或false,实现元素根据条件显示或隐藏

<div id="app">
    <div v-if="isshow">显示DIV内容</div><!-- v-if判断变量或表达式是否为true,true渲染该DIV,false则不渲染该DIV或DON中移除该DIV -->
    <div v-show="isshow">DIV2</div><!-- v-show通过判断来控制该DIV的display属性为true或false,实现元素根据条件显示或隐藏 -->
    <button @click="toggle">显示隐藏</button>
</div>
<script>
    var v = new Vue({
        el:"#app",
        data:{
            isshow:true,
        },
        methods:{
            toggle:function(){
                this.isshow = !this.isshow;//isshow取反
            }
        }
    })
</script>


以上是关于Vue.js初学笔记的主要内容,如果未能解决你的问题,请参考以下文章

使用带有渲染功能的 Vue.js 3 片段

Python Tornado初学笔记之表单与模板

vue初学实践之路——vue简单日历组件

Vue.js 中的片段

vue.js 源代码学习笔记 ----- helpers.js

vue.js 源代码学习笔记 ----- codegenEvents.js