Vue 基础入门

1. Vue.js 实例和数据绑定

通过构造函数 Vue() 就可以创建一个 Vue 的根实例,并启动 Vue 应用。
Vue 实例就是使用 Vue.js 的入口。

<!-- 挂载到这里 -->
<div id="app">
    {{message}}
</div>
<!-- 环境搭建 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 创建实例 -->
<script>
var app = new Vue({
    el: '#app',  // element,用于指定页面中已经存在的DOM元素,挂载到DOM中
    data: {  // 声明应用内需要双向绑定的数据
        message: 'Hello,Vue!'
    }
})
</script>
  • el
    el 即 element,是必不可少的选项,用于指定一个页面中已存在的 DOM 元素来挂载 Vue 实例,用标签(如 div)或 CSS 语法(如 #app)都可以。挂载后在 Vue 实例中定义的所有属性和方法都可以在此 DOM 中使用。
  • data
    通过 Vue 实例的 data 选项,可以声明应用内需要双向绑定的数据。建议所有会用到的数据都预先在 data 内声明,这样不至于将数据散落在业务逻辑中,难以维护。也可以指向一个已经有的变量。
  • 访问 Vue 实例的属性,在属性前加 $,如 app.$e1app.$data
    访问 data 元素的属性,直接 app.属性名,如 app.message

2. 生命周期钩子

  • created
    实例创建完成后调用,此阶段完成了数据的观测等,但尚未挂载, $el 还不可用。需要初始化处理一些数据时会比较有用。(还未挂载
  • mounted
    el挂载到实例上后调用,一般我们的第一个业务逻辑会在这里开始 。相当于 jQuery 的 $(document).ready()。(刚刚挂载
  • beforeDestroy
    实例销毁之前调用,要解绑一些使用 addEventListener 监听的事件等。

下面我们通过一个例子来理解生命周期钩子,如在页面中实时显示当前时间:

<div id="app">
    {{date}}
</div>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            date: new Date()
        },
        // 生命周期钩子
        created: function() {
              alert("我是Vue实例,创建完成,还未挂载到Dom")
        },
        mounted: function(){
            alert("我是Vue实例,已经挂载到DOM")
            var _this = this // this代表Vue实例本身
            this.timer = setInterval(function(){
                _this.date = new Date()
            }, 1000)
        },
        beforeDestroy: function(){
            if(this.timer){
                clearInterval(this.timer)
            }
        }
    })
</script>

3. 文本差值和表达式

  1. 语法
    双大括号(Mustache 语法){{}} 是最基本的文本插值方法,它会自动将我们双向绑定的数据实时显示出来。在前文中我们已经使用过:
<div id="app">
    {{message}}
</div>
  1. 用法
  • 在文本差值的 {{}} 中,除了简单的绑定属性值外,还可以使用 JavaScript 表达式进行简单的运算 、 三元运算等。
<div id="app">
    {{6*3}}
    {{3>6 ? message : a}}
</div>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            message: 'Hello,Vue!',
            a: 1
        }
    })
</script>
  • Vue.js 只支持单个表达式,不支持多行表达式,不支持语句和流控制。

例:
{{ 6+6*3 }} --- 可以进行简单的运算
{{ 6<3 ? message : a}} --- 可以使用三元运算符
注意:
{{ if(6>3) {return message} }} --- 不支持流控制,要使用三元运算
{{ var a = 6 }} --- 相当于 var a ; a = 6;,这是语句,不是表达式

4. 过滤器

  1. Vue 支持在 {{}} 插值的尾部添加管道符 | 对数据进行过滤。过滤器经常用于格式化文本,比如字母全部大写、货币千位使用逗号分隔等。过滤的规则是自定义的, 通过给 Vue 实例添加选项 filters 来设置:
{{data | filter}}

| 后面是过滤器的名字。

  • 例:将实时时间进行过滤使其格式化:
<div id="app">
    {{date}}
    {{date | formatDate}} <!-- 过滤器,| 后面是过滤器的名字 -->
</div>
<script>
    // 实现功能:在页面中实时显示当前时间
    // 在月份、日期、小时小于10时前面补0
    var plusZero = function(value){
        return value<10 ? '0'+value : value
    }
    var app = new Vue({
        el: '#app',
        data: {
            date: new Date(),
        },
        // 定义过滤器
        filters: {
            formatDate: function(value,a,b){ // 这里的value就是需要过滤的数据
                var date = new Date(value) // 将字符串转化为date类型
                var year = date.getFullYear()
                var month = plusZero(date.getMonth()+1)
                var day = plusZero(date.getDay())
                var hours = plusZero(date.getHours())
                var min = plusZero(date.getMinutes())
                var sec = plusZero(date.getSeconds())
                return year+'--'+month+'--'+day+'  '+hours+':'+min+':'+sec+' '+a+' '+b
            }
        },
        mounted: function(){
            var _this = this // this代表Vue实例本身
            this.timer = setInterval(function(){
                _this.date = new Date()
            }, 1000)
        },
        beforeDestroy: function(){
            if(this.timer){
                clearInterval(this.timer)
            }
        }
    })
</script>

效果如下图所示,第一行是直接获取的时间,第二行是经过滤器过滤后的时间,即格式化后的时间:
过滤器
  1. 过滤器的串联:
{{data | filter1 | filter2}}
  1. 过滤器的参数:
{{date | formatDate(arg1, arg2)}}

实例中第一个和第二个参数,分别对应过滤器的第二个和第三个参数,如:{{date | formatDate(11, 22}} 对应 formatDate: function(value,a,b){} 过滤器函数中的参数 a 和 b。

5. 指令和事件

  1. 指令( Directives )是 Vue 模板中最常用的一项功能,它带有前缀 v-,能帮我们快速完成 DOM 操作,循环渲染、显示和隐藏。

  2. 常用指令

  • v-text:­解析文本,和 {{}} 作用一样
  • v-html:解析 html
  • v-bind:动态更新 HTML 元素上的属性,如 idclass 等(注意 v-bind 后面是冒号)
  • v-on:绑定事件监听器,如 clickkeyup 等(函数必须写在 methods 里面

    注意:前两者后面跟 =,后两者后面跟 :

v-­on 具体介绍:
在普通元素上, v-­on 可以监听原生的 DOM 事件,除了 click 外,还有
dbclick(双击)、keyupmousemove 等。表达式可以是一个方法名,这些方法都写在 Vue 实例的 methods 属性内,并且是函数的形式,函数内的 this 指向的是当前 Vue 实例本身,因此可以直接使用 this.xxx 的形式来访问或修改数据。

  1. 常用指令实例演示:
<style>
    .transRed{ background: red; height: 30px; width: 100px; }
</style>
<div id="app">
    1. v-text 指令:解析文本 <br>
    <span v-text="apple"></span> <br>
    2. v-html 指令:解析html <br>
    <span v-html="banana"></span> <br>
    3. v-bind 指令:绑定活的属性 <br>
    <div v-bind:class="className"></div> <br>
    4. v-on 指令:绑定事件监听器 <br>
    <button v-on:click="count">{{countNum}}</button> <!--为按钮添加监听事件--><br>
</div>
<script>
    var app = new Vue({
        el: "#app",
        data: {
            apple: '苹果',
            banana: '<span style="color: yellow;">香蕉</span>',
            className: 'transRed',
            countNum: 0
        },
        methods: {
            count: function(){
                this.countNum = this.countNum + 1
            }
        }
    })
</script>
常用指令演示
  1. Vue 中用到的所有方法都定义在 methods 中。

6. 语法糖

语法糖是指在不影响功能的情况下 , 添加某种简洁方法实现同样的效果 , 从而更加方便程序开发:
v-bind ——> :
v-on ——> @

上例中可以替换为语法糖的形式:

<div v-bind:class="className"></div>
<div :class="className"></div>

<button v-on:click="count">{{countNum}}</button>
<button @click="count">{{countNum}}</button>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容

  • 一、简单介绍 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 学习此框架你...
    运维开发_西瓜甜阅读 976评论 0 12
  • vue.js 轻量级的MVVM框架数据驱动+组件化的开发 一、基本指令1、 v-if是条件渲染指令,它根据表达式的...
    时间追随者阅读 497评论 0 1
  • 第一节(指令) 入门案例 if else else-if v-show v-show只是显示和隐藏,修改的是css...
    强某某阅读 522评论 0 1
  • 理解MVC(数据层和表现层)的使用逻辑 使用Vue组件的生命周期和钩子函数 使用全局的Filters Slot、r...
    就换一颗红豆阅读 307评论 0 0
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,127评论 0 6