zoukankan      html  css  js  c++  java
  • Vue学习笔记01

    Vue学习笔记

    Vue.js实战.梁灏

    数据绑定和第一个Vue应用

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Vue 示例</title>
        </head>
    
        <body>
            <div id="app">
                <input type="text" v-model="name" placeholder="你的名字">
                <h1>你好,{{ name }}</h1>
            </div>
    
            <script src="https://unpkg.com/vue/dist/vue.min.js"></script>
    
            <script>
                var app=new Vue ({
                    el:'#app',
                    data: {
                        name: ''
                    }
                })
            </script>
        </body>
    
    </html>
    

    这段代码展示了Vue.js最核心的功能:数据的双向绑定,调用那段网址就是引入Vue的库。

    运行这段程序,在输入框输入的内容会实时展示在页面的h1标签内。

    image-20210310172946487

    2.1 Vue实例与数据绑定

    2.1.1 实例与数据

    Vue.js应用的创建很简单,通过构造函数Vue就可以创建出一个Vue的根实例,并启动Vue应用。

    var app=new Vue ({
    
    })
    

    变量app就代表了这个Vue实例,事实上,几乎所有代码都是一个对象,写入Vue实例的选项内的。

    首先,必不可少的一个选项就是el。el用于指定一个页面中已存在的DOM元素挂载Vue的实例,它可以是HTML Element,也可以是CSS选择器。比如:

    <div id="app"></div>
    var app=new Vue ({
    	el: document.getElementById('app')//或者是'#app',如开头那段程序
    })
    

    挂载成功后,我们可以通过app.$el来访问该元素。Vue提供了很多常用的实例属性与方法,都以$开头,比如$el。后续还会介绍更多有用的方法。

    回顾章节开始的代码,在input标签上有一个v-model的指令,它的值对应我们创建的Vue实例中的data选项中的name字段,这就是Vue的数据绑定。

    通过Vue实例的data选项,可以声明应用内需要双向绑定的数据。建议所有会用到的数据都预先在data内声明,这样不至于将数据散落在业务逻辑中,难以维护。

    Vue实例本身也代理了data对象内的所有属性,所以可以这样访问:

    var app=new Vue ({
    	el:'#app',
    	data: {
    		a: 2
    	}
    })
    console.log(app.a);//2
    

    除了显式的声明数据外,也可以指向一个已有的变量,并且它们之间默认建立了双向绑定,当修改其中任意一个时,另一个也会起变化:

    var myData = {
    	a:1
    }
    var app=new Vue ({
    	el:'#app',
    	data: myData
    })
    console.log(app.a);//1
    app.a=2;
    console.log(myData.a);//2
    myData.a=3;
    console.log(app.a);//3
    

    2.1.2 生命周期

    每个Vue实例创建时,都会经历一系列的初始化过程,同时也会调用相应的生命周期钩子,我们可以利用这些钩子,在合适的时机执行我们的业务逻辑。如果你使用过JQuery,一定知道它的ready()方法,比如如下这些示例:

    $(document).ready(function() {
    	//DOM加载完成后,会执行这里的代码
    });
    

    Vue的生命周期钩子与之类似,比较常用的有:

    created

    实例创建完成之后调用,此阶段完成了数据的观测等,但尚未挂载,$el还不可用。

    需要初始化处理一些数据时会比较有用,后面章节将有介绍。

    mounted

    el挂载到实例上后调用,一般我们的第一个业务逻辑会在这里开始。

    beforeDestroy

    实例销毁之前调用。主要解绑一些使用addEventListener监听的事件等。

    这些钩子与el和data类似,也是作为选项写入Vue的实例内,并且钩子的this指向的是调用它的Vue实例。

    var app=new Vue ({
    	el:'#app',
    	data:{
    		a:2
    	},
    	created:function () {
    		console.log(this.a);
    	},
    	mounted:function () {
    		console.log(this.$el);
    	}
    })
    

    2.1.3 插值与表达式

    使用双大括号'{{}}'是最基本的文本插值方法,它会自动将我们双向绑定的数据实时显示出来,例如:

    <div id="app">{{book}}</div>
    <script>
    	var app=new Vue ({
    		el:'#app',
    		data:{
    			book:'《Vue.js实战》'
    		}
    	})
    </script>
    

    大括号里的内容会被替换为《Vue.js实战》,通过任何方法修改数据book,大括号的内容都会被实时替换,比如下面的这个实例,实时显示当前的时间,每秒更新:

    <div id="app">
    	{{data}}
    </div>
    
    <script>
    	var app=new Vue ({
    		el: '#app',
    		data: {
    			date:new Date()
    		},
    		mounted: function () {
    			var _this=this;//声明一个变量指向Vue实例this,保证作用域一致
    			this.timer=setInterval(function() {
    				_this.date=new Date();//修改数据Date
    			},1000);
    		},
    		beforeDestroy: function() {
    			if (this.timer) {
    				clearInterval(this.timer);//在Vue实例销毁前,清除我们的定时器
    			}
    		}
    	})
    </script>
    

    image-20210310180601289

    如果有的时候就是想输出HTML,而不是将数据解释后的纯文本,可以使用v-html:

    <div id="app">
    	<span v-html="link"></span>
    </div>
    <script>
    	var app=new Vue ({
    		el:'#app',
    		data: {
    			link: '<a href="#">这是一个连接</a>'
    		}
    	})
    </script>
    

    link的内容将会被渲染成一个具有点击功能的a标签,而不是纯文本。这里要注意,如果将用户产生的内容使用v-html输出后,有可能导致XSS攻击,所以要在服务端对用户提交的内容进行处理,一般可将尖括号"<>"转义。

    image-20210310180914654

    如果想显示{{}}标签,而不进行替换,使用v-pre即可跳过这个元素和它的子元素的编译过程。

    例如:

    <span v-pre>{{这里的内容是不会被编译的}}</span>
    

    在{{}}中,除了简单的绑定属性值外,还可以使用JavaSrcipt表达式进行简单的运算,三元运算等等,例如:

    <div id="app">
    	{{number/10}}
    	{{isOK?'确定':'取消'}}
    	{{text.split(',').reverse().join(',')}}
    </div>
    <script>
    	var app=new Vue ({
    		el:'#app',
    		data: {
    			number: 100,
    			isOK: false,
    			text: '123,456'
    		}
    	})
    </script>
    

    显示的结果依次为:10、取消、456,123。

    Vue.js支支持单个表达式,不支持语句和流控制。另外,在表达式中,不能使用用户自定义的全局变量,只能使用Vue白名单内的全局变量,例如Math和Date。

  • 相关阅读:
    Web API初印象
    SQL注入总结篇
    Debian Linux 下安装pip3
    DVWA:环境搭建
    AWVS使用手册
    常见的反爬虫和应对方法
    Fiddler抓取手机APP数据包
    爬虫 Scrapy框架 爬取图虫图片并下载
    python 爬虫基础知识(继续补充)
    Python 爬虫 多进程清洗代理
  • 原文地址:https://www.cnblogs.com/zhanglichen/p/14513458.html
Copyright © 2011-2022 走看看