vue.js(一)

0. 前言

在北京来说,vue.js比较受广大的公司欢迎,用的比较多,因为从vue.js官方文档就能看出来它的优点,易用,也就是简单实用的意思,灵活,渐进式的框架,那什么是渐进式框架?就好比给你一个空屋,通了煤水电网,有床够睡,需要什么自己添。它还有一大特点就是性能上,17kb min+gzip 运行大小,从数字就能看出来vue.js比较轻,轻量级的,还有就是超快的虚拟DOM,就是对复杂的文档DOM结构,进行最小化地DOM操作,好吧,看看今天要说的!!!


图片.png

1. 简介

Vue.js 是一套构建用户界面的 渐进式框架。与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计。
Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

2. 代码实现

在学习一个新的框架的时候,第一个demo都是hello world,不要问我为什么,我也不知道,不是有句话说“世界上本来没有路,只是走的人多了,变成了路”,我感觉也就是用的人多了,渐渐的每个框架啊什么的第一个demo,也就成了第一个说明文档,所以今天,第一个我也来说一下hello world

1. hello world

HTML代码

<div id="app">{{msg}}</div>

JS代码

new Vue({
            el:'#app',
            data:{
                msg:'hello world',
            }
        })
图片.png

这只是一个简单的demo,当你学会它,离学会vue也就成功了一半了,

2. v-html

v-html指令,可以更新元素的innerHMT

这里稍微加一点难度,来一个比1+1=3还难的题,这里我想加入一个h1标签在hello里,怎么加?而且h1标签还是语义标签,要让它表现出来,正常情况下,你添加之后会是什么样的,是。。。


图片.png

那怎么处理,就用到了v-html指令

HTML代码

 <div id="app">
        <div v-html="msg"></div>
        {{address}}
    </div>

JS代码

 new Vue({
            el:'#app',
            data:{
                msg:'<h1>hello</h1>',
                address:"北京"
            }
        })
图片.png

3. v-if

v-if 条件渲染指令,根据其后表达式的bool值进行判断是否渲染该元素

HTML代码

 <div id="app">
        <div v-if="flag">
            今天有雾霾吗?
        </div>
    </div>

JS代码

 new Vue({
            el:'#app',
            data:{
                flag:true
            }
        })
图片.png

那么,我们把flag的bool值改成false,会成什么样子的,当然会不显示了,那么我在这里就不在赘述了。

4. v-for

v-for 指令可以绑定数据到数组来渲染一个列表
HTML代码

 <div id="app">
        <ul>
            <li v-for="(x,index) in list">
                {{index+1}} {{x.name}} {{x.age}} {{x.address}} {{x.tel}}
            </li>
        </ul>
    </div>

JS代码

new Vue({
            el:'#app',
            data:{
                list:[
                    {
                        name:'test01',age:18,address:100,QQ:123456789,tel:33333333333
                    },
                    {
                        name:'test01',age:18,address:100,QQ:123456789,tel:33333333333
                    },
                    {
                        name:'test01',age:18,address:100,QQ:123456789,tel:33333333333
                    },
                    {
                        name:'test01',age:18,address:100,QQ:123456789,tel:33333333333
                    }
                ]
            }
        })
图片.png

是不是觉得很方便啊

5. 赋值给变量

我们还可以将对象赋值给一个变量,用到的时候直接引用变量名
HTML代码

 <div id="app">{{msg}}</div>

JS代码

var data = {
            msg:'hello'
        };
        var vm = new Vue({
            el:'#app',
            data:data
        });
图片.png

6. v-on

用 v-on 指令监听 DOM 事件,还可以简写成@

HTML代码

 <div id="app">
        <p>{{msg}}</p>
        <button v-on:click="clickme">点我</button>
    </div>

JS代码

 var vm = new Vue({
            el:'#app',
            data:{
                msg:'tips'
            },
            methods:{
                clickme:function(){
                    this.msg = new Date-0;

                }
            }
        })
GIF.gif

是不是该问我his.msg = new Date-0; 有谁知道后面Date-0是什么意思呢?
把毫秒数转换成数字,然后你把她改成@click也可以,也能实现同样的效果

7. v-bind

v-bind 主要用于属性绑定,如 :src :class :style 属性绑定

HTML代码

 <div id="app">
        ![](src)
    </div>

JS代码

new Vue({
            el:'#app',
            data:{
                src:'1.jpg'
            }
        })
图片.png

当然v-bind也能简写,简写成 : 就可以了

v-bind绑定style

HTML代码

 <div id="app">
        <div :style="{'backgroundColor':bgc,'font-size':fs+'px'}">aaaaa</div>
    </div>
new Vue({
            el : '#app',
            data : {
                bgc : '#dfdfdf',
                fs : 30
            }
        })
图片.png

v-bind还可以绑定对象和数组

HTML代码

 <div id="app">
        <div :class="{clzA:a,clzB:b}">aaaa</div>
    </div>

JS代码

 new Vue({
            el : '#app',
            data : {
                a : true,
                b : false
            }
        })
图片.png

上面的a和b代表键值对里的key,key是一个样式class,而value是boolean类型的值。

绑定数组类型
CSS代码

 .clzA{
            color:red;
        }
        .clzA{
            background-color:green;
        }

HTML代码

<div id="app">
    <div :class="[a,b]">aaaa</div>
</div>

JS代码

 new Vue({
        el : '#app',
        data : {
            a : 'clzA',
            b : 'clzB',
        }
    })
图片.png

8. v-model

v-model的指令能使数据双向数据绑定

这里我们直接写一个demo,里面有两个输入框,实现在输入框输入,输入两个输入框的值的乘积,唉,整的跟绕口令是的,哈哈

HTML代码

 <div id="app">
        <input v-model="price" placeholder="price">
        <input v-model="number" placeholder="number">
        <p>{{total}}</p>
    </div>

JS代码

 new Vue({
            el:'#app',
            data:{
                number:15,
                price:3.29
            },
            computed:{
                total:function(){
                    return this.number*this.price
                }
            }
        })

computed相当于属性的一个实时计算,如果实时计算里关联了对象,那么当对象的某个值改变的时候,同时会出发实时计算

9. 阻止冒泡,默认行为

在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。在vue里面,有的时候我们也需要阻止冒泡还有默认行为,那么看看它们是怎么实现的呢?

阻止冒泡

CSS代码

.bdr{
            border: 3px solid blue;
            padding: 10px;
        }

HTML代码

 <div id="app">
        <div class="bdr" @click="outter">
            outter
            <div class="bdr" @click="middle">
                middle
                <div class="bdr" @click="inner">
                    inner
                </div>
            </div>
        </div>
    </div>

JS代码

 new Vue({
            el : '#app',
            methods : {
                inner : function () {
                    alert ('inner')
                },
                middle : function () {
                    alert ('midder')
                },
                outter : function () {
                    alert ('outter')
                }

            }
        })
GIF.gif

不阻止冒泡的时候是这样的,那么我们阻止了之后呢?在HTML中inner的div中 @click.stop="inner"这样写,就阻止了冒泡


GIF.gif

你看是不是就弹出来一次

阻止默认行为

HTML代码

<div id="app">
    <a href="http://www.baidu.com" @click="clk">百度</a>
</div>

JS代码

 new Vue({
        el : '#app',
        methods : {
            clk : function () {
                alert ('百度')
            }
        }
    })
GIF.gif

这是没有阻止默认行为的,下面我们就来一个阻止默认行为的,写法同上,@click.prevent="clk",主要看效果


GIF.gif

这是阻止默认行为之后的效果

10. 组件

组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能。

要注册一个全局组件,你可以使用 Vue.component(tagName, options)。 例如:

Vue.component('my-component', {
  // 选项
})

对于自定义标签名,Vue.js 不强制要求遵循 W3C规则 (小写,并且包含一个短杠),尽管遵循这个规则比较好。

HTML代码

 <div id="app">
        <my-component></my-component>
    </div>

JS代码

 Vue.component('my-component',{
            template:'<div>A custom {{msg}}!</div>',
            data:function () {
                return{
                    msg:'hello'
                }
            }
        })
        new Vue({
            el : '#app'
        })
图片.png

上面的是全局组件,组件在注册之后,便可以在父实例的模块中以自定义元素 <my-component></my-component> 的形式使用。当然还有一种局部组件

局部组件

不必在全局注册每个组件。通过使用组件实例选项注册,可以使组件仅在另一个实例/组件的作用域中可用:

HTML代码

<div id="app">
    <my-component></my-component>
</div>

JS代码

 new Vue({
        el:'#app',
        components: {
            // <my-component> 将只在父模板可用
            'my-component': {
                template: '<div>A custom {{msg}}!</div>',
                data:function(){
                    return {
                        msg:'hello'
                    }
                }
            }
        }
    })
图片.png

11. 使用 Prop 传递数据

组件实例的作用域是孤立的。这意味着不能并且不应该在子组件的模板内直接引用父组件的数据。可以使用 props 把数据传给子组件。

prop 是父组件用来传递数据的一个自定义属性。子组件需要显式地用 props 选项声明 “prop”

HTML代码

<div id="app">
    <my-component msg="hello"></my-component>
</div>

JS代码

Vue.component('my-component',{
        props:['msg'],
        template:'<div>A custom {{msg}}!</div>'
    })
    new Vue({
        el : '#app'
    })
图片.png

12. 动态 Prop

类似于用 v-bind 绑定 HTML 特性到一个表达式,也可以用 v-bind 动态绑定 props 的值到父组件的数据中。每当父组件的数据变化时,该变化也会传导给子组件:

HTML代码

<div id="app">
    <input type="text" v-model="parentMsg">
    <my-component :msg="parentMsg"></my-component>
</div>

JS代码

 Vue.component('my-component',{
        props:['msg'],
        template:'<div>A custom {{msg}}!</div>'
    })
    new Vue({
        el : '#app',
        data : {
            parentMsg : 'hello'
        }
    })
GIF.gif

3. 结束语

希望我写的东西对读者老爷们有所帮助,喜欢的点赞啊!!!

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

推荐阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,046评论 0 29
  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,204评论 0 6
  • 1.安装 可以简单地在页面引入Vue.js作为独立版本,Vue即被注册为全局变量,可以在页面使用了。 如果希望搭建...
    Awey阅读 10,999评论 4 129
  • 下载安装搭建环境 可以选npm安装,或者简单下载一个开发版的vue.js文件 浏览器打开加载有vue的文档时,控制...
    冥冥2017阅读 6,033评论 0 42
  • 许久不曾追随感受,只写一点点随笔。 感受还是如影随形,焦虑,焦虑,还是焦虑。 担忧咨询事业的发展,担忧自己的无价值...
    拧巴哥阅读 221评论 1 0