[TOC]
# 模版语法
Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。结合响应系统,Vue 能够智能地计算出最少需要重新渲染多少组件,并把 DOM 操作次数减到最少。uni-app使用自定义的一套标签,不能直接使用传统的HTML标签,例如DIV就不允许直接使用。
# 文本插值
数据绑定最常见的形式就是使用Mustache(胡子)语法 `“{{ }}”`的文本插值,它会自动将双向绑定的数据实时的显示出来。
```
<text>{{ message }}</text>
```
Mustache 标签将会被替代为对应数据对象上 message属性的值。无论何时,绑定的数据对象上 message属性发生了改变,插值处的内容都会更新。
通过使用 v-once 指令,也能执行一次性地插值,当数据改变时,插值处的内容不会更新。但请留心这会影响到该节点上的其它数据绑定:
```
<text v-once>这个将不会改变: {{ message }}</text>
```
使用双花括号(Mustache语法)`{{ }}`是最基本的文本差值方法,它会自动将我们双向绑定的数据实时的显示出来,绑定的也可以是一个对象,例如:
文件pages/lab/gramma/express.vue的内容如下:
```
<template>
<view>
<text>{{ book.title }}</text>
</view>
</template>
<script>
export default {
data() {
return {
book: {
title: "uni-app实战",
price: 59,
},
}
}
}
</script>
<style>
</style>
```
大括号里面的内容会被替换成“uni-app实战”,通过任何方法修改数据对象book,大括号内的内容都会被实时替换。
# data 属性
`data`必须声明为返回一个初始数据对象的函数;否则页面关闭时,数据不会自动销毁,再次打开该页面时,会显示上次数据。
~~~
//正确用法,使用函数返回对象
data() {
return {
title: 'Hello'
}
}
~~~
~~~
//错误写法,会导致再次打开页面时,显示上次数据
data: {
title: 'Hello'
}
~~~
# 属性绑定与缩写
指令是带有 v- 前缀的特殊属性。指令用于在表达式的值改变时,将某些行为应用到 DOM 上。Mustache 语法不能作用在 HTML 属性上,遇到这种情况应该使用 v-bind 指令:
```
<view id=”{{ dynamicId }}”></view>
```
```
<view v-bind:id="dynamicId"></view>
```
在布尔特性的情况下,它们的存在即暗示为 true,v-bind 工作起来略有不同,例如:
```
<button v-bind:disabled="isButtonDisabled" @click="changeStatus">切换</button>
```
> 如果 isButtonDisabled 的值是 null、undefined 或 false,则 disabled 特性甚至不会被包含在渲染出来的` <button> `元素中。
可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。下面的例子点击按钮切换文本的显示,为了演示,首先定义isButtonDisabled属性默认为false,意思是按钮可用,定义seen属性控制文本消息message是否可见,默认可见(true)。
```
data: {
isButtonDisabled: false,
seen: true,
message: 'Hello world'
},
```
然后通过v-bind将isButtonDisabled动态绑定到按钮组件disabled属性上。
```
<button v-bind:disabled="isButtonDisabled" v-on:click="changeStatus">切换</button>
```
单击按钮触发changeStatus事件,在事件中改变seen属性,控制文本消息message的显示与隐藏。
```
methods: {
changeStatus() {
this.seen = !this.seen;
}
}
```
代码清单:
```
<!-- pages/lab/gramma/vbind.vue -->
<template>
<view style="flex-direction: column; flex: 1;">
<button v-bind:disabled="isButtonDisabled" v-on:click="changeStatus">切换</button>
<text v-show="seen">{{message}}</text>
</view>
</template>
<script>
export default {
data: {
isButtonDisabled: false,
seen: true,
message: '广州番禺职业技术学院'
},
methods: {
changeStatus() {
this.seen = !this.seen;
}
}
}
</script>
<style>
view {
display: flex;
flex-direction: row;
}
</style>
```
这里的v-show指令用于根据条件展示元素,带有 v-show 的元素始终会被渲染并保留在 DOM 中。v-show 只是简单地切换元素的 CSS 属性 display。
v-on与v-bind是常用的指令,vue定义了一个语法糖,达到简化代码的目的:
常规写法
```
<button v-bind:disabled="isButtonDisabled" v-on:click="changeStatus">切换</button>
```
简写:
```
<button :disabled="isButtonDisabled" @click="changeStatus">切换</button>
```
# 表达式
迄今为止,在我们的模板中,我们一直都只绑定简单的属性键值。但实际上,对于所有的数据绑定,虽然Vue.js 都提供了完全的 JavaScript 表达式支持,但是为兼容平台差异,uni-app无法支持复杂的 JavaScript 表达式。
目前可以使用的有` + - * % ?: ! == === > < [] `.。
下面的表达式都是合法的:
```
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
<view v-bind:id="'list-' + id"></view>
```
- 内容介绍
- EcmaScript基础
- 快速入门
- 常量与变量
- 字符串
- 函数的基本概念
- 条件判断
- 数组
- 循环
- while循环
- for循环
- 函数基础
- 对象
- 对象的方法
- 函数
- 变量作用域
- 箭头函数
- 闭包
- 高阶函数
- map/reduce
- filter
- sort
- Promise
- 基本对象
- Arguments 对象
- 剩余参数
- Map和Set
- Json基础
- RegExp
- Date
- async
- callback
- promise基础
- promise-api
- promise链
- async-await
- 项目实践
- 标签系统
- 远程API请求
- 面向对象编程
- 创建对象
- 原型继承
- 项目实践
- Classes
- 构造函数
- extends
- static
- 项目实践
- 模块
- import
- export
- 项目实践
- 第三方扩展库
- immutable
- Vue快速入门
- 理解MVVM
- Vue中的MVVM模型
- Webpack+Vue快速入门
- 模板语法
- 计算属性和侦听器
- Class 与 Style 绑定
- 条件渲染
- 列表渲染
- 事件处理
- 表单输入绑定
- 组件基础
- 组件注册
- Prop
- 自定义事件
- 插槽
- 混入
- 过滤器
- 项目实践
- 标签编辑
- 移动客户端开发
- uni-app基础
- 快速入门程序
- 单页程序
- 底部Tab导航
- Vue语法基础
- 模版语法
- 计算属性与侦听器
- Class与Style绑定
- 样式与布局
- Box模型
- Flex布局
- 内置指令
- 基本指令
- v-model与表单
- 条件渲染指令
- 列表渲染指令v-for
- 事件与自定义属性
- 生命周期
- 项目实践
- 学生实验
- 贝店商品列表
- 加载更多数据
- 详情页面
- 自定义组件
- 内置组件
- 表单组件
- 技术专题
- 状态管理vuex
- Flyio
- Mockjs
- SCSS
- 条件编译
- 常用功能实现
- 上拉加载更多数据
- 数据加载综合案例
- Teaset UI组件库
- Teaset设计
- Teaset使用基础
- ts-tag
- ts-badge
- ts-button
- ta-banner
- ts-list
- ts-icon
- ts-load-more
- ts-segmented-control
- 代码模版
- 项目实践
- 标签组件
- 失物招领客户端原型
- 发布页面
- 检索页面
- 详情页面
- 服务端开发技术
- 服务端开发环境配置
- Koajs快速入门
- 快速入门
- 常用Koa中间件介绍
- 文件上传
- RestfulApi
- 一个复杂的RESTful例子
- 使用Mockjs生成模拟数据
- Thinkjs快速入门
- MVC模式
- Thinkjs介绍
- 快速入门
- RESTful服务
- RBAC案例
- 关联模型
- 应用开发框架
- 服务端开发
- PC端管理界面开发
- 移动端开发
- 项目实践
- 失物招领项目
- 移动客户端UI设计
- 服务端设计
- 数据库设计
- Event(事件)
- 客户端设计
- 事件列表页面
- 发布页面
- 事件详情页面
- API设计
- image
- event
- 微信公众号开发
- ui设计规范