Vue.js基础知识

1.安装-使用<script>引入
操作步骤:
(1)进入vue.js官网:https://cn.vuejs.org/v2/guide/installation.html
(2)点击开发版本

(3)拷贝开发版本页面的vue.js源代码
(4)创建项目目录文件夹VUE
(5)VUE目录下新建vue.js文件,将开发版本中的源代码放入vue.js文件内
(6)VUE目录下新建index.html文件,将vue.js通过<script>标签引入

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue入门</title>
    <script src="vue.js"></script>
</head>
<body></body>
</html>

注意:引入需要放在head中引入,避免放在body内会发生抖屏的现象
2.创建一个Vue实例

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Vue入门</title>
        <script src="vue.js"></script>
  </head>
  <body>
      <div id="root">{{msg}}</div>
      <script>
        new Vue({
            el: "#root",//element 元素,挂载点,绑定dom节点:表示Vue的示例接管页面上的哪个元素,此时vue实例与id=root的dom进行了绑定 #的含义是id=
            data: { //存储数据,用于替换标签中的占位符,vue.js是通过数据操纵标签的
              msg:"Hello World"
            }
        })
    </script>
  </body>
</html>

3.挂载点,模板与实例的关系
(1)挂载点:vue的el属性id对应的dom标签
vue只会处理挂载点下面的内容
(2)模板:挂载点内部的内容都叫做模板
模板的两种写法:

<div id="root">
    <h1>{{msg}}</h1>  //1.直接写在挂载点的内部(建议)
</div>
<script>
    new Vue({
        el: "#root",
        data: { 
            msg:"Hello World"
        }
    })
</script>

<div id="root"></div>
<script>
    new Vue({
        el: "#root",
        template: '<h1>{{msg}}</h1>', //2.写在vue实例内部,template属性表示模板,只会显示在挂载点内部
        data: {
            msg:"Hello World"
        }
    })
</script>

上述两种方式显示结果一致,如下:


模板显示

(3)实例:将挂载点、模板、数据等属性写入实例,vue会自动结合模板和数据生成最终要展示的内容,然后将最终生成的内容放入挂在点之中
4.实例中的数据,事件与方法
(1)v-text指令,当前标签显示的内容,用户v-html同样可以实现

 <div id="root">
    <h1 v-text="number"></h1> //v-text此处可以替换成v-html,展示效果相同
</div>
<script>
    new Vue({
        el: "#root",
        data: {
            msg:"Hello World",
            number:123
        }
    })
</script>

(2)v-text与v-html的区别
当上述例子中的number变为html标签时,使用v-text会将标签进行转义,将标签显示在页面中,而使用v-html将不会对标签进行转义,标签将不会显示在页面中

//使用v-text
<div id="root">
    <div v-text="content"></div>
</div>
<script>
    new Vue({
        el: "#root",
        data: {
            content:'<h1>Hello World</h1>>'
        }
    })
</script>
v-text页面展示
//使用v-html
<div id="root">
    <div v-html="content"></div>
</div>
<script>
    new Vue({
        el: "#root",
        data: {
            content:'<h1>Hello World</h1>'
        }
    })
</script>
v-html页面展示

(3)v-on,绑定事件的指令

//事件名称:click
//事件绑定的方法:handleClick
//方法写入实例的methods中
<div id="root">
    <div @click="handleClick">{{content}}</div>    //@为v-on:的简写
</div>
<script>
    new Vue({
        el: "#root",
        data: {
            content:'Hello World'
        },
        methods:{
            handleClick:function () {
                this.content='world' //this表示当前实例下的data中的元素
            }
        }
    })
</script>

5.属性绑定和双向数据绑定
(1)v-bind:单向绑定指令,表示绑定属性 title表示被绑定的属性,=后面的数据表示实例中的属性,也可以是js表达式
单向绑定:数据决定页面显示内容,页面无法决定数据的内容

<div id="root">
    <div :title="title">hello world</div> //v-bind 缩写为:
</div>
<script>
    new Vue({
        el: '#root',
        data: {
            title: 'this is hello world'
        }
    })
</script>
单向绑定示例

(2)v-model:双向绑定指令

<div id="root">
    <div :title="title">hello world</div> //v-bind 缩写为:,v-bind表示绑定属性 title表示被绑定的属性,=后面的数据表示实例中的属性,也可以是js表达式
    <input v-model="content"/> //使用v-model绑定后当变量content的进行变化是input的值也进行变化,当input输入框中的值进行变化时 content的值也会进行变化
    <div>{{content}}</div>
</div>
<script>
    new Vue({
        el: '#root',
        data: {
            title: 'this is hello world',
            content: 'this is content'
        }
    })
</script>

6.Vue中的计算属性和侦听器
(1)computed:vue实例的计算属性,conmputed指的是一个属性通过其它属性计算而来
优点:在如下例子中,当firstName和lastName中的值都未发生变化,此时computed不会重新计算fullName的值,会使用上次的缓存(内置缓存),只有当firstName和lastName中的任意值发生变化时才会重新计算fullName的值,性能较高

<div id="root">
    姓:<input v-model="firstName"/>
    名:<input v-model="lastName"/>
    <div>{{fullName}}</div>
</div>
<script>
    new Vue({
        el: '#root',
        data:{
            firstName:'',
            lastName: ''
        },
        computed:{
            fullName:function () {
                return this.firstName + ' ' + this.lastName
            }
        }
    })
</script>

(2)watch:侦听器,用于监听某一个数据的变化,当数据发生变化时,我们就可以在侦听器中编写我们所需要的业务逻辑

<div id="root">
    姓:<input v-model="firstName"/>
    名:<input v-model="lastName"/>
    <div>{{fullName}}</div>
    <div>{{count}}</div>
</div>
<script>
    new Vue({
        el: '#root',
        data:{
            firstName:'',
            lastName: '',
            count: 0
        },
        computed:{
            fullName:function () {
                return this.firstName + ' ' + this.lastName
            }
        },
        watch:{
            fullName: function () { //当firstName和lastName中任意一个数据发生变化,计数变量都会增加1
                this.count++
            }
        }
    })
</script>

7.常见指令
(1)v-if:条件指令

<div id="root">
    <div v-if="show">hello world</div> //只有当v-if的值为ture时,此标签的内容才会显示
    <button @click="handleClick">toggle</button>
</div>
<script>
    new Vue({
        el:'#root',
        data:{
            show:true
        },
        methods:{
            handleClick:function () {
                this.show=!this.show
            }
        }
    })
</script>

(2)v-show

<div id="root">
    <div v-show="show">hello world</div> //只有当v-show的值为ture时,此标签的内容才会显示
    <button @click="handleClick">toggle</button>
</div>
<script>
    new Vue({
        el:'#root',
        data:{
            show:true
        },
        methods:{
            handleClick:function () {
                this.show=!this.show
            }
        }
    })
</script>

(3)v-if和v-show的区别
v-if是在dom中中介把当前标签删除;而v-show是把当前标签的style属性中的display设置为none,把当前标签进行隐藏;
如果频繁的需要把当前标签的隐藏的频率高时,使用v-show会减少添加dom和小会dom的操作,性能较好
(3)v-for ,用户数据的循环展示

<div id="root">
    <div v-show="show">hello world</div>
    <button @click="handleClick">toggle</button>
    <ul>
        <li v-for="(item,index) in list" :key="item">{{item}}</li>
        <!--item 代表list中的每一条数据-->
        <!--使用v-for时需要搭配 key属性,他会提升页面渲染的效率-->
        <!--注意:key要求不能相同,index代表list每一项的下标,key设置为index每次都会不同-->
    </ul>
</div>
<script>
    new Vue({
        el:'#root',
        data:{
            show:true,
            list:[1,2,3]
        },
        methods:{
            handleClick:function () {
                this.show=!this.show
            }
        }
    })
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353