【vue基础语法详细介绍】

vue基础语法详细介绍

  • [1. 基础语法](#1. 基础语法)
    • [1.1 声明式渲染](#1.1 声明式渲染)
    • [1.2 条件与循环](#1.2 条件与循环)
    • [1.3 事件处理](#1.3 事件处理)
    • [1.4 双向数据绑定](#1.4 双向数据绑定)
    • [1.5 组件化](#1.5 组件化)
  • [2. 模板语法](#2. 模板语法)
    • [2.1 插值](#2.1 插值)
      • [2.1.1 文本](#2.1.1 文本)
      • [2.1.2 html](#2.1.2 html)
      • [2.1.3 属性](#2.1.3 属性)
      • [2.1.4 表达式](#2.1.4 表达式)
    • [2.2 指令](#2.2 指令)
      • [2.2.1 核心指令](#2.2.1 核心指令)
        • [2.2.1.1 v-if |v-else-if|v-else](#2.2.1.1 v-if |v-else-if|v-else)
        • [2.2.1.2 v-show](#2.2.1.2 v-show)
        • [2.2.1.3 v-for](#2.2.1.3 v-for)
        • [2.2.1.4 v-on|v-model|v-for](#2.2.1.4 v-on|v-model|v-for)
        • [2.2.1.5 参数 v-bind:href,v-on:click](#2.2.1.5 参数 v-bind:href,v-on:click)
        • [2.2.1.6 简写](#2.2.1.6 简写)

1. 基础语法

Vue.js使用声明式渲染、组件化、指令等一系列概念来构建前端应用,以下是一些Vue.js的基本语法和概念:

1.1 声明式渲染

Vue.js 使用了基于HTML的模板语法,允许你声明式地将 DOM 绑定到底层 Vue 实例的数据上。

html 复制代码
<div id="app">
  {{ message }}
</div>
javascript 复制代码
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

当 Vue 实例被创建时,它将挂载点内的DOM与数据绑定通过一些指令与特殊的属性连接起来。

1.2 条件与循环

v-if 进行条件渲染,用 v-for 进行列表渲染。

html 复制代码
<div id="app">
  <p v-if="seen">Now you see me</p>
  <ul>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>
  </ul>
</div>
javascript 复制代码
var app = new Vue({
  el: '#app',
  data: {
    seen: true,
    todos: [
      { text: 'Learn JavaScript' },
      { text: 'Learn Vue' },
      { text: 'Build something awesome' }
    ]
  }
})

如果 seen 的值为 false,那么 <p> 标签不会被渲染,列表中的内容会根据 todos 数组动态生成。

1.3 事件处理

可以用 v-on 指令监听 DOM 事件,并在触发时执行一些 JavaScript 代码。

html 复制代码
<div id="app">
  <button v-on:click="reverseMessage">Reverse Message</button>
</div>
javascript 复制代码
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

点击按钮后,reverseMessage 方法将被调用,数据 message 的内容将被反转。

1.4 双向数据绑定

Vue.js 提供了一个指令 v-model 实现表单输入和应用状态之间的双向绑定。

html 复制代码
<div id="app">
  <input v-model="message">
  <p>{{ message }}</p>
</div>
javascript 复制代码
var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

用户输入的每一个字符都会立即更新到 message 并反映到 <p> 标签里。

1.5 组件化

组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。

javascript 复制代码
// 定义名为 todo-item 的新组件
Vue.component('todo-item', {
  template: '<li>This is a todo item</li>'
})

现在你可以在一个父级组件模板中以自定义元素 <todo-item> 的形式使用它了。

html 复制代码
<ol>
  <!-- 创建一个 todo-item 组件的实例 -->
  <todo-item></todo-item>
</ol>

Vue 的组件结构允许我们以不同的方式组合组件来构建强大的应用。

以上是Vue的基本概念和常用语法的介绍,Vue的设计思想很大程度上是让开发者能够专注于应用的数据逻辑,而不需要直接操作DOM,从而简化了前端开发的复杂度。

2. 模板语法

Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据,所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解析器解析,vue将模板编译成虚拟dom,结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。

  • html模板语法:
    这是一种基于字符串的模板技术,以字符串和数据为输入,通过用正则表达式将占位符替换为所需数据的方式,构建出完整的 HTML 字符串。

2.1 插值

2.1.1 文本

使用 {``{msg}}的形式,标签将会被替换成为数据对象(data)上msg属性值,当绑定的数据对象上的msg属性值发生变化时,插值处的值也会发生变化(双向绑定)

2.1.2 html

{``{}}的方式将数据处理为普通文本,如果要输出html,需要使用v-html指令

示例:

在data中定义一个html属性,其值为html

javascript 复制代码
data: {
    html:  '<input type="text" value="hello"/>'
}

在html中取值

javascript 复制代码
<span v-html="html"></span>

2.1.3 属性

HTML属性中的值应使用v-bind指令,类型与jQuery中的$("#xxx").attr(propName, propVal)

示例,以修改元素的class属性为例:

定义一个样式

javascript 复制代码
<style>
.redClass {
    font-size: 30px;
    color: red;
}
</style>

在data中定义一个属性,其值为上面定义的样式名

javascript 复制代码
data: {
    red: 'redClass'
}

在html使用v-bind指令设置样式

javascript 复制代码
<p>设置之前:  aaaa</p>
<p>设置之后: <span v-bind:class="red">aaa</span></p>

在浏览器中可以看到相应的效果

2.1.4 表达式

几种常见的表达式:

{{str.substr(0,6).toUpperCase()}}
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }} 三元运算符
<li v-bind:>我的Id是js动态生成的</li>

示例1:

在html中加入元素,定义表达式

javascript 复制代码
<span>{{str.substr(0,6).toUpperCase()}}</span>

在data中加入一个属性,名为str与html中对应

javascript 复制代码
data: {
    str: 'hello vue'
}

查看效果:字符串被截取,并转换为大写

示例2:

javascript 复制代码
<span>{{ number + 1 }}</span>

在data中加入一个属性,名为str与html中对应

javascript 复制代码
data: {
    number: 10
}

在data中定义的number值将会被加1

示例3:

这是一个三元运算,如果ok为true,表达式值为YES ,如果ok为false则表达式值为NO

javascript 复制代码
<span>{{ ok ? 'YES' : 'NO' }}</span>

在data中加入一个属性,名为str与html中对应

javascript 复制代码
data: {
    ok: true
}

示例4:

演示id属性绑定和动态赋值

javascript 复制代码
<p>
    <input type="text" v-bind:id="bookId"/></br>
    <!--动态生成Id-->
    <input type="text" v-bind:id="'bookList_' + id"/>
</p>
javascript 复制代码
data: {
    bookId: 'book001',
    id: 'book002'
}

该示例可以通过开发者工具查看生成的id属性值。

2.2 指令

指令指的是带有"v-"前缀的特殊属性

2.2.1 核心指令

2.2.1.1 v-if |v-else-if|v-else

根据其后表达式的bool值进行判断是否渲染该元素, 指令特性的值预期是单个 JavaScript 表达式 (v-for 是例外情况,稍后我们再讨论)

示例:

HTML

javascript 复制代码
<div v-if="type === 'A'">
    type == A
</div>
<div v-else-if="type === 'B'">
    type == B
</div>
<div v-else>
    other value
</div>

JS

javascript 复制代码
var vm = new Vue({

       el: '#app',

       data: {
           type: 'C'
       }
   });

可以修改data中的type值观察页面的输出。

注: js = == === 之间的区别
一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false
alert(1 == "1"); // true
alert(1 === "1"); // false
2.2.1.2 v-show

与v-if类似,只是不会渲染其身后表达式为false的元素,而且会给这样的元素添加css代码:style="display:none"

v-show 表达式true则显示,否则不显示。

注意:使用v-show,虽然不显示,但在页面的dom中是存在的,只是display属性为none

示例: 在HTML中加入如下内容

javascript 复制代码
<div v-show="show === 'yes'">
    show == yes
</div>

在data中定义show属性

javascript 复制代码
var vm = new Vue({
    el: '#app',
    data: {
        show: 'yes' 
    }
});

修改show值,观察页面显示

2.2.1.3 v-for

循环遍历

遍历数组: v-for="item in items", items是数组,item为数组中的数组元素
遍历对象: v-for="(value,key,index) in stu", value属性值, key属性名,index下标

示例:

定义一个div,使用v-for指令输出,items是vue实例中data中定义的对象数组

javascript 复制代码
<!--数组-->
<div v-for="item in items">
     {{item.name}} -- {{item.id}}
</div>

<!--循环生成下拉列表-->
<div>
    <select >
        <option v-for="item in items" 
            v-bind:value="item.id">{{item.name}}</option>
    </select>
</div>

<!--对象-->
<div v-for="(o,key) in obj">
    {{key}}-{{o}}
</div>
javascript 复制代码
var vm = new Vue({

    el: '#app',

    data: {
        itmes:[
            {name: 'zs',age:18},
            {name: 'ww',age:19},
            {name: 'ls',age:20},
            {name: 'zl',age:21}
        ],
        obj: {
            name:'张三',
            age: 21,
            addr: 'xxxx'
        }
    }
});
2.2.1.4 v-on|v-model|v-for

创建一组多选框,可以获取到用户选择项

javascript 复制代码
<!--
循环生成一组多选按钮,v-model通过vue的双向绑定将用户选择的项保存到
定义的selected组数中
-->
<div v-for="(item,index) in items">
    {{index}}:<input type="checkbox" v-bind:value="item.id"
            v-model="selected">{{item.name}}
</div>
<button v-on:click="getSelected()">获取选择</button>
javascript 复制代码
var vm = new Vue({

    el: '#app',

    data: {
        type: 'C',
        show: 'no',
        items:[
            {name: '天津',id:18},
            {name: '昆明',id:19},
            {name: '武汉',id:20},
            {name: '南京',id:21}
        ],
        obj: {
            name:'张三',
            age: 21,
            addr: 'xxxx'
        },
        selected:[]
    },
    methods: {
        getSelected: function() {
            console.log(this.selected);
        }
    }
});
2.2.1.5 参数 v-bind:href,v-on:click

示例:

javascript 复制代码
<!--参数:href-->
<div>
    <a v-bind:href="url">baidu</a>
</div>

<!--
参数:动态参数.
attname需要在data中定义,
注意:attname要全部小写!!
-->
<div>
    <a v-bind:[attrname]="url">baidu</a>
    <button v-on:[evname]="clickme">点我看看</button>
</div>

注意:在动态参数中,作为参数的变量名(如:attrname)要全部小写,否则无效 !!

javascript 复制代码
var vm = new Vue({

    el: '#app',

    data: {

        url: 'https://www.baidu.com',
        attrname:'href',
        evname: 'click'
    },

    methods: {
        clickme: function() {
            console.log("点到我了");
        }
    }

});
2.2.1.6 简写

Vue为v-bindv-on这两个最常用的指令,提供了特定简写

指令 简写 示例
v-bind:xxx :xxx v-bind:href 简写为 :href
v-on:xxx @xxx v-on:click 简写为 @click
相关推荐
如若12321 分钟前
对文件内的文件名生成目录,方便查阅
java·前端·python
滚雪球~1 小时前
npm error code ETIMEDOUT
前端·npm·node.js
沙漏无语1 小时前
npm : 无法加载文件 D:\Nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本
前端·npm·node.js
supermapsupport1 小时前
iClient3D for Cesium在Vue中快速实现场景卷帘
前端·vue.js·3d·cesium·supermap
brrdg_sefg1 小时前
WEB 漏洞 - 文件包含漏洞深度解析
前端·网络·安全
胡西风_foxww1 小时前
【es6复习笔记】rest参数(7)
前端·笔记·es6·参数·rest
m0_748254881 小时前
vue+elementui实现下拉表格多选+搜索+分页+回显+全选2.0
前端·vue.js·elementui
星就前端叭2 小时前
【开源】一款基于Vue3 + WebRTC + Node + SRS + FFmpeg搭建的直播间项目
前端·后端·开源·webrtc
m0_748234522 小时前
前端Vue3字体优化三部曲(webFont、font-spider、spa-font-spider-webpack-plugin)
前端·webpack·node.js
Web阿成2 小时前
3.学习webpack配置 尝试打包ts文件
前端·学习·webpack·typescript