Vue基础语法总结大全

data属性

- v-html,v-text 采用{{}}语法==>插值运算

            v-html:它可以加标签,它会解析成html

            v-text:不能加标签,如果加了,它会当作字符串展示出来

例子:

<div id="app">
        <!-- 使用 v-cloak 能够解决 插值表达式闪烁的问题,可以显示++++ -->
        <p v-cloak>++++++{{msg}}+++++</p>

        <!-- 1.默认 v-text 是没有闪烁问题的 -->
        <!-- 2.v-text、v-html会覆盖元素中原本的内容,不会显示“******”和“12345678” -->
        <h4 v-text="msg">************</h4>

        <!-- 3.v-html可以把内容当做html来显示出来,其他方式会连带标签 -->
        <div>{{msg2}}</div>
        <div v-text="msg2"></div>
        <div v-html="msg2">12345678</div>
    </div>

    <script src="vue.js"></script>

    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                msg:'yuyu',
                msg2:'<h1>小鱼儿与花无缺<h1>'
            }
        })
    </script>

在这里插入图片描述

  • v-cloak 能够解决 插值表达式闪烁的问题

并在css中设置:

                       [v-cloak]{

                                display: none;

                       }
   让所有设置 v-cloak 的元素隐藏,当加载完毕之后,元素身上的 v-cloak 就会消失

- v-bind属性:是Vue中提供绑定属性的指令

<div id="app">
        <!-- v-bind:是Vue中提供的用于绑定属性的命令 -->
        <input type="button" value="按钮" v-bind:title="mytitle+'123'">
        
        <!-- 注意:v-bind: 指令可以被简写为 :要绑定的属性 -->
        <!-- v-bind中  也可以写合法的JS表达式 -->
        <input type="button" value="按钮" :title="mytitle+'123'">
    </div>

    <script src="lib/vue.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                mytitle:'自己定义的title'
            }
        })
    </script>
  1. v-bind 自定义名字
  2. v-bind:id="…" 绑定id名字
  3. v-bind:title="…"绑定title属性
  4. v-bind:style="…" 绑定样式属性
  5. v-bind:…="…"绑定自定义属性

methods属性

<body>
    <div id="app">
        <input type="button" value="浪起来" @click="lang">
        <input type="button" value="停止" @click="stop">

        <h4>{{msg}}</h4>
    </div>

    <script>
        // 注意:在VM实例中,如果想要获取data中的数据,或者想要调用methods中的方法,必须通过this.数据属性名  或  this.方法名 
        //  来进行访问,这里的this,就表示我们new出来的VM实例对象
        var vm = new Vue({
            el:'#app',
            data:{
                msg:'猥琐发育,别浪~~~',
                intervalId:null   //在data上定义  定时器ID
            },
            methods:{
                lang(){
                    // 箭头函数能够使内部的this和外部的this永远保持一致,解决this指向的问题
                    if(this.intervalId != null) return;
                    this.intervalId = setInterval( () => {
                        // 获取到头的第一个字符
                        var start = this.msg.substring(0,1)
                        // 获取到后面的所有字符
                        var end = this.msg.substring(1)
                        // 重新拼接得到新的字符串,并赋值给this.msg
                        this.msg = end + start
                    },200)
                    // 注意:VM实例会监听自己身上data中所有数据的改变,只要数据一发生变化,就会自动把最新的数据,从data上同
                    // 步到页面中去;【不需要考虑如何重新渲染DOM页面】
                },

                // 终止定时器
                stop(){
                    clearInterval(this.intervalId);
                    this.intervalId = null;
                }
            }
        })
    </script>
</body>

分析:
1、给【浪起来】按钮,绑定一个点击事件 v-on || 简写@
2、 在按钮的事件处理函数中,写相关的业务逻辑代码:拿到msg字符串,然后 调用 字符串的substring来进行字符串的截取操作,把第一个字符串取出来,放到最后一个位置即可;
3、为了实现点击一下按钮,自动截取的功能,需要把步骤2中的代码,放到一个定时器中。

- 事件访问修饰符

使用位置:<input type=“button” value=“点击” name="" id="" @click.访问修饰符=“btnHandler”>
      .stop:阻止冒泡行为
      .prevent:阻止默认行为
      .capture:事件捕获机制,从外往里执行
      .self:被修饰的元素只能通过自己来触发事件,只会阻止自己的冒泡行为,不会阻止别的元素
      .once:只触发一次事件函数

<body>
    <div id="app">
        <!-- 使用.stop阻止向上冒泡 -->
        <div class="inner" @click="yuyu">
            <input type="button" value="我爱你" @click.stop="leilei">
        </div>
        <!-- 使用.prevent阻止默认事件 -->
        <a href="http://www.baidu.com" @click.prevent="love">有问题找百度</a>
        <!-- 使用.captrue实现捕获触发事件的机制 -->
        <div class="inner" @click.capture="yuyu">
            <input type="button" value="我爱你" @click="leilei">
        </div>
        <!-- 使用.self实现只有点击当前元素才会触发事件处理函数 -->
        <div class="inner" @click.self="yuyu">
            <input type="button" value="我爱你" @click="leilei">
        </div>
        <!-- 使用.once只触发一次事件处理函数 -->
        <a href="http://www.baidu.com" @click.prevent.once="love">有问题找百度</a>
        <!-- .stop 和 .self的区别 -->
        <div class="yulei" @click="yulei">
            <div class="inner" @click="yuyu">
                <input type="button" value="我爱你" @click.stop="leilei">
            </div>
        </div>
        <!-- .self只会阻止自己身上冒泡行为的触发,并不会真正阻止冒泡行为 -->
        <div class="yulei" @click="yulei">
            <div class="inner" @click.self="yuyu">
                <input type="button" value="我爱你" @click="leilei">
            </div>
        </div>
    </div>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{},
            methods:{
                yuyu(){
                    alert('鱼鱼');
                },
                leilei(){
                    alert('磊磊')
                },
                love(){
                    alert('I Love You')
                },
                yulei(){
                    alert('鱼鱼love磊磊')
                }
            }
        })
    </script>
</body>

- v-model(页面)(vue实例),任意一端数据发生变化时则另一端也改变

<body>
    <div id="app">
        <h4>{{msg}}</h4>
        <!-- 使用v-model可以实现表单元素和Model中数据的双向绑定 -->
        <!-- 注意:v-model只能运用在表单元素中 -->
        <!-- input(radio,text,address,email..)select  checkbox  textarea -->
        <input type="text" v-model="msg" style="width: 100%">

        <!-- v-bind只能实现数据的单向绑定,从M自动绑定到V -->
        <!-- <input type="text" v-bind:value="msg" style="width: 100%"> -->
    </div>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                msg:'v-model数据双向绑定'
            }
        })
    </script>
</body>

操作class属性

<style>
      .red{
           color: red; 
        }
        .thin{
            font-weight: 200;
        }
        .italic{
            font-style: italic;
        }
        .active{
            letter-spacing: 0.5em;
        }
</style>
<body>
    <div id="app">
        <!-- 第一种方式,直接传递一个数组,注意:这里的class需要使用v-bind做数据绑定 -->
        <h2 :class="['red','thin','italic']">小鱼儿与花无缺</h2>

        <!-- 在数组中使用三元表达式 -->
        <h2 :class="['red','thin','italic',flag?'active':'']">小鱼儿与花无缺</h2>

        <!-- 在数组中使用 对象来代替三元表达式,提高代码可读性 -->
        <h2 :class="['red','thin','italic',{'active':flag}]">小鱼儿与花无缺</h2>

        <!-- 在为class使用 v-bind 绑定对象的时候,对象的属性是类名,由于 对象的属性可带引号,也可不带引号,所以 这里我没写引号;属性值是一个标识符 -->
        <h2 :class="classObj">小鱼儿与花无缺</h2>
    </div>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                flag:true,
                classObj:{red:true,thin:true,italic:false,active:true}
            },
        })
    </script>
</body>

基于数据渲染一个列表,类似于JS中的遍历。其数据类型可以是 Array | Object | number | string。

<body>
    <div id="app">
        <label>
                ID:<input type="text" v-model="id">
        </label>
        <label>
                Name:<input type="text" v-model="name">
        </label>
        <input type="button" value="添加" @click="add">
        <!-- 循环的时候,key属性只能使用number获取string -->
        <!-- key在使用的时候,必须使用v-bind属性绑定的形式,指定key的值 -->
        <!-- 在组件中使用v-for循环的时候,或者在一些特殊的情况中,如果v-for有问题,必须在使用v-for的同时,指定唯一的 字符串/数字 类型 :key值 -->
        <p v-for="item in user" :key="item.id">
            <input type="checkbox">
            {{item.name}}
        </p>
    </div>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                id:'',
                name:'',
                user:[
                    {id:1,name:'yuyu1'},
                    {id:2,name:'yuyu2'},
                    {id:3,name:'yuyu3'},
                    {id:4,name:'yuyu4'},
                ]
            },
            methods:{
                add(){
                    this.user.unshift({id:this.id,name:this.name})
                }
            }
        })
    </script>
</body>

v-if 和 v-show 的使用

  1. v-if条件渲染指令,根据表达式的真假来添加或删除元素。其语法结构是:v-if=“expression”,其中expression是一个返回bool值的表达式,其结果可以是true或false,也可以是返回true或false的表达式。

  2. 也是条件渲染指令,不同的是有 v-show 的元素会始终渲染并保持在 DOM 中。和v-if指令不同点在于:v-show是根据表达式之真假值,切换元素的 display CSS 属性,当条件变化时该指令触发过渡效果。

    v-if 有更高的切换消耗而 v-show 有更高的初始渲染消耗。因此,如果需要频繁切换使用 v-show 较好,如果在运行时条件不大可能改变则使用 v-if 较好。

v-else 二选一

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>07Vue的常用指令v-else-if</title>
</head>
<body>
    <div id="app">
        <!--v-else-if-->
        <p>输入的成绩对于的等级是:</p>
        <p v-if="score >= 90">优秀</p>
        <p v-else-if="score >= 80">良好</p>
        <p v-else-if="score >= 60">及格</p>
        <p v-else>不及格</p>
        <input type="text" v-model="score">
    </div>
<script_top src="js/vue.js"></script_top>
<script_top>
    //通过数据操控界面

    let vm = new Vue({
        el:'#app',
        data:{
            //v-else-if.
            score:50  //优秀 良好 及格 不及格
        }
    });
</script_top>
</body>
</html>

计算属性(computed properties)

计算属性 (computed properties) 就是不存在于原始数据中,而是在运行时实时计算出来的属性。他的起因就是为了方便维护。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<div id="app">
    <p>初始值:{{name}}</p>
    <!-- 表达式要产生结果即可 -->
    <p>翻转值:{{name.split('').reverse().join('')}}</p>
    <p>函数调用:{{revecrStr()}}</p>
    <!-- 直接调用计算属性,就会直接调用get方法。 -->
    <p>计算属性:{{reverse}}</p>
</div>
<script_top src="js/vue.js"></script_top>
<script_top>
    new Vue({
        el:'#app',
        data:{
            name:'Rosc jack'
        },
        methods:{
            revecrStr(){ //函数
                return this.name.split('').reverse().join('');
            },

        },
        //计算选项
        computed:{
            // get方法  计算属性
            // 直接调用计算属性,就会直接调用get方法。
            reverse(){
                return (this.name.split('').reverse().join(''));
            }
        }
    })
</script_top>
</body>
</html>

计算属性 和 Methods的区别?
当页面重新渲染(不是刷新)的时候,计算属性不会变化,直接读取缓存使用,适合较大量的计算和改变频率较低的属性;而method,就是当页面重新渲染的时候(页面元素的data变化,页面就会重新渲染),都会重新调用method。
计算属性默认只有 getter ,不过在需要时你也可以提供一个 setter (笔者也不是特别理解)

局部组件和全局组件

//局部组件
<div id="app">
  <my-test msg="你好"></my-test>
  <my-test msg="传值2"></my-test>
</div>
//js
new Vue({
  el:"#app",
  components:{
    'my-test':{
      props:['msg'],
      template:'<div>{{msg}}</div>'
    }
  }
})
//全局组件
<div id="app">
  <my-test msg="你好"></my-test>
  <my-test msg="传值2"></my-test>
</div>

//js
Vue.component('my-test',{
  props:['msg'],
  template:'<div>{{msg}}</div>'
})

利用props进行传值

//html
<div id="app">
  <my-test v-bind:listData="list"></my-test>
</div>

//js
new Vue({
  el:"#app",
  data:{
    list:[
      {title:'这是数据'},
      {title:'这是数据22'}
    ]
  },
  components:{
    'my-test':{
      props:['listData'],
      template:`
        <select name="" id="">
          <option v-for="item in listData">{{item.title}}</option>
        </select>
      `
    }
  }
})

如果需要传的值在vue的实例中

vue中的变量

  • var 是函数级作用域,let是块级作用域

          例子:
    

{

let n = 10;

var m = 1;

}

结果:n // 会报错:ReferenceError:a is not defined.

结果:m // 1

  • let不允许在相同作用域内,重复声明同一个变量
  • const声明一个只读的常量,且声明后,常量的值是不能改变的,只能在声明的位置后面使用
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CodeWhy是一个非常优秀的在线编程教育平台,在该平台上我们可以找到丰富的Vue资料。Vue是一种流行的JavaScript框架,用于构建用户界面。CodeWhy通过提供一系列精心设计的课程,帮助学习者上手并掌握Vue的使用。 CodeWhy Vue资料提供了从入门到精通Vue的全套学习资源。它包含了大量的学习教程、书籍、视频教程和示例代码。其中的教程和书籍涵盖了Vue的基础知识,如组件、指令、过滤器、路由和状态管理等。它们以简洁懂的方式解释了Vue的各个方面,并通过实例演示了如何应用到实际项目中。 CodeWhy还提供了丰富的视频教程,这些教程以一种亲切的讲解方式,帮助学习者更好地理解Vue的各种概念和机制。学习者可以通过观看这些视频,掌握Vue的核心概念和技巧,并了解如何使用Vue构建出高效、可维护的Web应用。 另外,CodeWhy还提供了许多实战项目和练习题目,供学习者巩固所学知识,提高编码能力。这些项目和练习旨在帮助学习者通过实际动手操作来应用Vue的知识,锻炼解决问题的能力。 总结一下,CodeWhy的Vue资料是一套非常全面和专业的学习资源,它包含了基础教程、进阶内容、实战项目和练习题,能够帮助学习者系统、深入地学习Vue知识。无论是初学者还是有一定经验的开发者,都可以通过CodeWhy Vue资料找到合适自己的学习路径,并快速成为Vue的专家。 ### 回答2: CodeWhy 是一家知名的在线教育平台,他们提供了丰富的 Vue 相关资料。在 CodeWhy 上,我们可以找到各种形式的教学资源,包括视频课程、教学文档、编程实战项目和问答社区。 首先,CodeWhy 的 Vue 视频课程非常丰富,从入门到进阶都有覆盖。他们的教学风格生动懂,通过实例和案例演示,帮助学习者快速掌握 Vue 的核心概念和使用方法。 其次,CodeWhy 提供了大量的教学文档,通过文字和图表的形式全面解析了 Vue 的各个方面,包括 Vue 的基本语法、组件化开发、路由和状态管理等。这些文档详细且系统,适合学习者自主学习和查阅。 此外,CodeWhy 还为学习者提供了编程实战项目,通过实际项目实践,帮助学习者将理论知识应用到实际项目中。这些项目设计与实现的过程将帮助学习者更好地理解 Vue 的使用方法,并提高他们的编程能力和实际应用能力。 最后,CodeWhy 的问答社区是学习者交流和解决问题的良好平台。在这个社区中,学习者可以与其他学习者和资深开发者进行互动,分享经验和解答问题,使学习过程更加高效和愉快。 综上所述,CodeWhy 提供了丰富全面的 Vue 相关资料,包括视频课程、教学文档、编程实战项目和问答社区。无论是初学者还是有一定经验的开发者,都可以在 CodeWhy 找到适合自己的学习资源,提升自己的 Vue 技能。 ### 回答3: CodeWhy是一个在线教育平台,提供Vue技术的学习资料。Vue是一款前端开发框架,被广泛应用于构建响应式的用户界面。CodeWhy的Vue资料涵盖了从入门到进阶的内容,适合各种程度的学习者。 CodeWhy的Vue资料包括以下几个方面: 1. Vue基础知识:介绍Vue的基本概念、使用方法和核心原理。学习者可以通过练习掌握Vue的基本语法和常用指令,了解组件化开发的思想。 2. Vue组件开发:详细介绍了Vue组件的创建、复用和通信方法。学习者可以了解组件的生命周期钩子函数,掌握组件之间的传值和事件监听。 3. Vue路由管理:讲解了Vue-Router的基本使用和配置方法。学习者可以通过实践项目来了解Vue-Router的路由配置和导航守卫的使用。 4. 状态管理:引入了Vuex的概念和使用方法,介绍了Vuex在大型应用中的优势和原理。学习者可以通过练习实践去掌握Vuex的核心概念和常用模式。 5. Vue进阶:深入讲解了Vue的高级用法,如自定义指令、插件编、服务端渲染等。学习者可以通过这部分资料来提升Vue的应用能力,掌握更多的进阶知识。 总的来说,CodeWhy的Vue资料对于想深入学习和应用Vue技术的开发者来说是非常有用的。内容丰富、系统完整,每个章节都配有相应的实例和练习项目,可以帮助学习者更好地理解和掌握Vue的各个方面。同时,CodeWhy还提供了在线问答和答疑服务,学习者可以随时提问和解决问题。无论是初学者还是有一定经验的开发者,都可以从CodeWhy的Vue资料中受益匪浅。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值