初识Vue

1. MVVM模式

Vue采用MVVM(Model-View-ViewModel)模式实现,MVVM模式由MVC演变而来当View层变化时,会自动更新到ViewModel层,反之亦然,View层与ViewModel层通过双向绑定建立连接。

MVVM模型

2. Vue实例

<!-- 一个简单的Vue实例 -->
<html>
    <head>
        <meta charset="utf-8">
        <title>Vue-test</title>
    </head>
    
    <body>
        <div id="app">
            <input type="text" v-model="name" placeholder="Your name">
            <h1>Hello, {{name}}</h1>
        </div>
        <script src = "https://unpkg.com/vue/dist/vue.min.js"></script>
        <script>
            new Vue({
                el:'#app',  //用于指定一个页面中已经存在的DOM元素,这里使用页面的总id
                data: {
                    name: '',
                }
            })
        </script>
    </body>
</html>

3. 生命周期钩子

生命周期钩子是Vue中的一类函数:每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

一个典型的Vue实例生命周期如下图所示:

Vue实例生命周期

这其中的beforeCreatecreated等即为Vue中的生命周期钩子。常用的钩子函数有:

  • created 实例创建完成后调用,此阶段完成了数据的观测等,但尚未挂载,$el还不可用。需要初始化处理一些数据时比较有用
  • mounted el挂载到实例上之后调用,一般我们的第一个业务逻辑会从这里开始
  • beforeDestory 实例销毁之前调用。主要用于解绑一些使用addEventListener监听的事件等。
<!-- created与mounted的执行顺序 -->
<body>
    <script src = "https://unpkg.com/vue/dist/vue.min.js"></script>
    <script>
        new Vue({
            el:'#app',  
            data: {
                name: 'Taegan',
            },

            created: function() {
                console.log("created:" + this.name);
            },

            mounted: function() {
                console.log("mounted:" + this.name);
            }
        })
    </script>
</body>
执行结果

4. v-html与v-pre

  • v-html 用于输出HTML文本;
  • v-pre 用于显示{{}}标签;

5. 过滤器

Vue支持在{{}}插值的尾部添加一个管道符|对数据进行过滤,常用于格式化文本,如字母大小写、货币千位逗号分隔等。

过滤的规则时自定义的,通过给Vue实例添加选项filters来设置,如可以对时间进行格式化处理:

<!-- 实时显示当前时间,每秒更新,并以过滤器格式化时间格式 -->
<body>
    <div id="app">
        <!-- 添加过滤器 -->
        {{date | formatDate}}
    </div>
    <script src = "https://unpkg.com/vue/dist/vue.min.js"></script>
    <script>
        //处理时间格式,在月份、日期、小时等时间,小于10时前面补0
        var padDate = function(value) {
                return value < 10 ? "0"+value : value;
        }

        new Vue({
            el:'#app',  
            data: {
                date: new Date(),
            },

            //添加过滤器
            filters: {
                formatDate: function(value) {
                    var date = new Date(value);
                    var year = date.getFullYear();
                    var month = padDate(date.getMonth() + 1);
                    var day = padDate(date.getDate());
                    var hours = padDate(date.getHours());
                    var minutes = padDate(date.getMinutes());
                    var seconds = padDate(date.getSeconds());

                    return year + "-" + month + "-" + day + " " + hours +
                    ":" + minutes + ":" + seconds;
                }
            },

            mounted: function() {
                var _this = this;   //声明一个变量指向Vue实例this,保证作用域一致
                this.timer = setInterval(function() {
                    _this.date = new Date();
                }, 1000);   //setInterval方法按照指定的周期调用函数
            },

            beforeDestory: function() {
                if (this.timer) {
                    clearInterval(this.timer);  //在Vue实例销毁前,清除定时器
                }
            },
        })
    </script>
</body>  

过滤器也可以串联,也可以接受参数。

6. v-bind 与 v-on

  • v-bind 用于动态更新HTML元素上的属性
<!-- v-bind基本用法 -->
<body>
    <div id="app">
        <a v-bind:href="url">绑定a标签href属性</a>
        <img v-bind:src="imgUrl">
    </div>

    <script src = "https://unpkg.com/vue/dist/vue.min.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                url: "https://cn.vuejs.org/",
                imgUrl: "https://cn.vuejs.org/images/logo.png"
            }
        })
    </script>
</body>  
  • v-on 用于绑定事件监听器,如点击事件v-on:click
<!-- v-on基本用法 -->
<body>
    <div id="app">
        <p v-if="show">这是一段显隐的文本</p>
        <button v-on:click = "handleClose">{{message}}</button> 
    </div>

    <script src = "https://unpkg.com/vue/dist/vue.min.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                show: true,
                message: "隐藏",
            },

            methods: {
                handleClose: function() {
                    this.show = !this.show;
                    if (this.show) {
                        this.message = "隐藏";
                    } else {
                        this.message = "显示";
                    }
                }
            }
        })
    </script>
</body>

v-bind的语法糖为:v-on的语法糖为@

参考

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