[1] Vue基本概念

1 选项

1.1 is

1、作用:将HTML既定元素替换为自定义的元素
2、示例
常规HTML元素

 <ul>
  <li></li>
  <li></li>
  <li></li>
</ul>

使用自定义组件代替常规元素

 <ul>
  <li is='my-component'></li>
</ul>

1.2 ref

1、作用:为元素或子组件赋予一个ID引用,通过this.$refs.refName来访问元素或子组件的实例
2、示例

<p ref="p">Hello</p>
<children ref="children"></children>
this.$refs.p
this.$refs.children

1.3 v-bind

1、作用:使用v-bind可以将JS中绑定的变量映射到HTML中;

  • 可以绑定css样式,实现动态切换class
  • 语法糖是“:”
    2、定义
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>第七次</title>
  <script src="../js/vue.js"></script>
  <style>
    .active{
      color: red;
    }

  </style>
</head>

<body>

  <div id="app">
      <!--第一个class没有使用动态绑定,则不能直接删除,两个class会合并处理-->
    <h2 class="NotChange" :class="{active:  isActive,line: isLine}">{{message}}</h2>
    <button @click="changeColor">点击变色</button>
  </div>

  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: 'hello World!',
        isActive: true,
        isLine: true
      },
      methods: {
        changeColor:  function(){
          this.isActive = !this.isActive;
        }
      }
    });
  </script>
</body>

</html>
image.png

1.4 v-clock

1、作用:用于解决网速慢情况下,HTML元素渲染慢导致的闪烁问题。
2、示例

 
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<style>
        [v-cloak]{
            display: none !important;
        }
</style>
</head>
 
<body>
   
    <div id="app" v-cloak>{{msg}}</div>
 
    <script>
            new Vue({
                el: '#app',
                data: {
                    msg: '欢迎Vue!'
                }
            })
        </script>
</body>
 
</html>

1.5 v-el

1、作用:将修饰元素绑定为DOM对象,并用$els调用
2、示例

<!DOCTYPE html>
<html lang="en" xmlns:v-el="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>组件</title>
</head>
<body>
    <template id="demo">
        <h2>组件对象</h2>
    </template>
    <div id="app">
        <h2 v-el:myh2>DOM对象</h2>
        <button @click="getDom">获取DOM对象</button>
        <hr>
        <demo v-ref:mycom></demo>
        <button @click="getCom">获取组件对象</button>
    </div>
<script src="../../../js/vue/vue/1.0/vue.js"></script>
<script type="application/javascript">
    //创建Vue对象
    new Vue({
        el:'#app'
        ,methods:{
            getDom(){
                console.log(this.$els.myh2);
            }
            ,getCom(){
                console.log(this.$refs.mycom);
            }
        }
        ,components:{
            'demo':{
                template:'#demo'
            }
        }
    });
</script>
</body>
</html>

1.6 v-if/v-else

1、作用:通过v-if实现多个元素的展示切换;
2、示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue中v-if的常见使用</title>
    <script src="https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js"></script>
</head>
<script>
window.onload = function(){

    //创建一个vue实例
    var app = new Vue({
        el: '#app',
        data: {
            type:'C',
            loginType:'username'
        },
        methods:{
            changeloginType(){
                let self = this;
                if(self.loginType=='username'){
                    self.loginType = ''
                }else{
                    self.loginType = 'username'
                }
            }
        }
    })
}

</script>
<body>
    <div id="app">
        <div style="color:red">v-if的简单实用</div>
        <template>
            <div v-if="type == 'A'">
                A
            </div>
            <div v-else-if="type=='B'">
                B
            </div>
            <div v-else>
                C
            </div>
        </template>
        <div style="color:green">v-if的弹框切换</div>
        <template v-if="loginType === 'username'">
            <label>用户名:</label>
            <input placeholder="Enter your username" key="username-input">
        </template>
        <template v-else>
            <label>密码:</label>
            <input placeholder="Enter your email address" key="email-input">
        </template>
        <button @click="changeloginType">切换状态</button>
    </div>
</body>
</html>

1.7 v-for

1、作用:在HTML遍历展示变量元素
2、示例

<body>
  <div id="app">
    <p v-for="(item, i) in list">索引值:{{i}} --- 每一项:{{item}}</p>
  </div>
</body>
<script>
  var vm = new Vue({
    el: '#app',
    data:{
      list: [1,2,3,4,5]
    },
    methods: {}
  });
</script>

1.8 v-html

1.9 v-slot

1、作用:
1)插槽用于决定将所携带的内容,插入到指定的某个位置,从而使模板分块,具有模块化的特质和更大的重用性。插槽显不显示、怎样显示是由父组件来控制的,而插槽在哪里显示就由子组件来进行控制.
2)简而言之,在子组件中引入<slot>,在父组件引入子组件后,可以在子组件中定义新的内容
2、语法糖:“#”
3、示例:
定义子组件

<template>
  <div class= 'button'>
      <button></button>
      <slot></slot>       //slot 可以放在任意位置。(这个位置就是父组件添加内容的显示位置)
  </div> 
</template>

在父组件中使用子组件

//父组件:(引用子组件 ebutton)
<template>
  <div class= 'app'>
     <ebutton> 定义的新内容</ebutton>
  </div>
</template>

多个slot还可以使用具名插槽,来定义子组件的位置

1.10 v-model

1、作用:双向绑定指定的变量
2、示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>test02</title>
  <script src="vue2.6.14.js"></script>
</head>
<body>
  <div id="app2">
    <div>
      <input type="text" v-model="message" placeholder="helloVue"/>
    </div>
    <h1>{{message}}</h1>
  </div>

</body>
<script>
  var vm = new Vue({
    el: '#app2',
    data:{
      message: "12323213213"
    },
    methods: {}
  });
</script>
</html>

1.11 v-on

1、作用:绑定事件
2、示例:
指定事件发生时调用的函数

<div class="app">
    <button v-on:click="myclick">click me</button>
</div>  

编写函数

var app = new Vue({
    el:'.app',
    data:{
        
    },
    methods:{
        myclick:function(){
            console.log(111111);
        }
    }
});

可以在一个按钮上绑定多个函数

<div class="app">
    <button v-on:mouseenter='onenter' v-on:mouseleave='leave'>click me</button>
</div>  

1.12 v-once

1、作用:只会被渲染一次,后续不会随着数据的改变而改变,静态内容
2、示例

<div>
    <div v-once>{{count}}</div>
    <button v-on:click="addCount">加个一吧</button>
  </div>

<script>
  export default {
    name: "Vonce",
    data() {
      return {
        count: 10
      }
    },
    methods: {
      addCount: function () {
        this.count += 1;
        console.log('this.count:'+this.count);
      }
    }
  }
</script>

1.13 v-pre

1.14 v-ref

1.15 v-show

1、作用:v-show 指令通过改变元素的 css 属性(display)来决定元素是显示还是隐藏。
2、示例:

<div id="app">
  <p v-show="type==='科技'">大数据之下的锦鲤:为什么你的微博总抽不到奖</p>
</div>

只有在条件成立时,才能显示渲染内容

<script>
  var app = new Vue({
    el: '#app',
    data: {
      type:'技术'
    }
  });
</script>

1.16 v-text

1、作用:将变量内容直接渲染到标签中,不会出现网速有问题带来的闪烁现象
2、示例:


    <div id="app">
    <!--  
        注意:在指令中不要写插值语法  直接写对应的变量名称 
        在 v-text 中 赋值的时候不要在写 插值语法
        一般属性中不加 {{}}  直接写 对应 的数据名 
    -->
    <p v-text="msg"></p>
    <p>
        <!-- Vue  中只有在标签的 内容中 才用插值语法 -->
        {{msg}}
    </p>
</div>
 
<script>
    new Vue({
        el: '#app',
        data: {
            msg: 'Hello Vue.js'
        }
    });

2 属性

2.1 el

1、作用:挂载HTML id指定的元素,指定元素名称为"#id"

2.2 data

1、作用:保存变量数据。当一个 Vue 实例被创建时,它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时,视图将会产生“响应”,即匹配更新为新的值

2.3 props

1、作用:props是父组件用于向子组件传递数据的通道;
2、示例:
1)静态props
定义一个子组件

var childNode = {
  template: `
        <div>childNode</div>
        `
};

定义一个父组件,并在父组件中注册子组件

var parentNode = {
  template: `
        <div>
          <child></child>
          <child></child>
        </div>
        `,
  components: {
    child: childNode
  }
};

在Vue对象中注册父组件

new Vue({
  el: "#example",
  components: {
    parent: parentNode
  }
});

在子组件中定义一个变量,并在props中指定

var childNode = {
  template: `
        <div>
          {{forChildMsg}}
        </div>
        `,
  props: ["for-child-msg"]
};

在父组件中指定props的值

var parentNode = {
  template: `
        <div>
          <p>parentNode</p>
          <child for-child-msg="aaa"></child>
          <child for-child-msg="bbb"></child>
        </div>
        `,
  components: {
    child: childNode
  }
};

2)动态props
在模板中,要动态地绑定父组件的数据到子组件模板的 props,和绑定 Html 标签特性一样,使用v-bind绑定;

基于上述静态 props 的代码,这次只需要改动父组件:

var parentNode = {
  template: `
        <div>
          <p>parentNode</p>
          <child :for-child-msg="childMsg1"></child>
          <child :for-child-msg="childMsg2"></child>
        </div>
        `,
  components: {
    child: childNode
  },
  data: function() {
    return {
      childMsg1: "Dynamic props msg for child-1",
      childMsg2: "Dynamic props msg for child-2"
    };
  }
};

2.5 methods

1、作用:在methods中可以为Vue对象指定方法
2、示例:

var vm = new Vue({
  methods: {
      方法名:function(){}  
  }
})

在方法中访问对象属性,可使用this指定

2.6 events

1、作用:events是子组件向父组件发送消息的通道;

2.7 computed

1、作用:
1)保存会随着变量而改变的中间变量的值,计算属性是基于它们的响应式依赖进行缓存的,只在相关响应式依赖发生改变时它们才会重新求值。
2)简单来讲,它可以降低前端对于中间变量的计算压力,提高响应速度。
3)computed不支持异步。
4)如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed
5)如果computed属性属性值是函数,那么默认会走get方法;函数的返回值就是属性的属性值;在computed中的,属性都有一个get和一个set方法,当数据变化时,调用set方法。
2、示例:


image.png

2.8 watch

1、作用:
1)不支持缓存,数据变,直接会触发相应的操作;
2)watch支持异步;
3)监听数据的变化,并作出对应的改变
2、示例:


image.png

3 生命周期

3.1beforeCreate

3.2 created

created:此时,组件的data和methods已经可以用了;但是页面还没有渲染出来;在这个生命周期函数中,我们经常会发起Ajax请求;

3.3 beforeMount

3.4 mounted

3.5 beforeUpdate

3.6 updated

3.7 beforeDestroy

3.8 destroyed

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

推荐阅读更多精彩内容