1. **模板基础语法**
- **模板结构**
- Vue的模板通常是一段HTML代码,被包裹在一个`<template>`标签内(在单文件组件中)。它定义了组件在浏览器中呈现的外观。例如:
```vue
<template>
<div>
<h1>My Vue Component</h1>
</div>
</template>
```
- 这个简单的模板包含了一个`<div>`元素和一个`<h1>`标题元素,用于展示组件的基本结构。
- **根元素要求**
- 在一个Vue模板中,通常需要有一个根元素。这意味着所有其他元素都应该嵌套在这个根元素内部。例如,下面的模板是不符合要求的:
```vue
<template>
<h1>First Element</h1>
<p>Second Element</p>
</template>
```
- 应该修改为:
```vue
<template>
<div>
<h1>First Element</h1>
<p>Second Element</p>
</div>
</template>
```
2. **插值语法**
- **文本插值(双大括号)**
- 使用双大括号`{{ }}`是最常见的插值方式,用于将数据绑定到模板中的文本内容。例如,假设有一个组件,其`data`选项中有一个`message`属性:
```javascript
export default {
data() {
return {
message: 'Hello, Vue!'
};
}
};
```
- 在模板中可以这样使用插值语法来显示`message`的值:
```vue
<template>
<div>
<p>{{ message }}</p>
</div>
</template>
```
- 这样,`message`的值就会显示在`<p>`标签内部。而且,当`message`的值发生变化时,DOM中的文本内容也会自动更新。
- **HTML插值(v - html)**
- 如果要将数据解析为HTML并插入到模板中,需要使用`v - html`指令。不过要注意,使用`v - html`可能会带来安全风险,因为它会将数据直接作为HTML插入,可能会导致XSS(跨站脚本攻击)。例如:
```javascript
export default {
data() {
return {
htmlContent: '<strong>Some bold text</strong>'
};
}
};
```
- 在模板中使用`v - html`指令:
```vue
<template>
<div>
<p v - html="htmlContent"></p>
</div>
</template>
```
- 这样,`<p>`标签内部就会将`htmlContent`的值解析为HTML并显示。
3. **指令语法**
- **指令的基本概念**
- 指令是带有`v -`前缀的特殊属性,用于在模板中应用特殊的行为或逻辑。它们是Vue模板的核心特性之一。例如,`v - bind`用于绑定属性,`v - on`用于绑定事件等。
- **v - bind指令(绑定属性)**
- `v - bind`指令用于将一个表达式的值绑定到一个HTML属性上。它可以简写为`:`。例如,要将一个组件的`data`选项中的`imageSrc`属性绑定到一个`<img>`标签的`src`属性上:
```javascript
export default {
data() {
return {
imageSrc: 'https://example.com/image.jpg'
};
}
};
```
- 在模板中使用`v - bind`指令:
```vue
<template>
<div>
<img v - bind:src="imageSrc">
</div>
</template>
```
- 也可以简写为:
```vue
<template>
<div>
<img :src="imageSrc">
</div>
</template>
```
- **v - on指令(绑定事件)**
- `v - on`指令用于监听DOM事件,并在事件触发时执行一个表达式或方法。它可以简写为`@`。例如,要在按钮点击时执行一个组件中的`increment`方法:
```javascript
export default {
data() {
return {
count: 0
};
},
methods: {
increment() {
this.count++;
}
}
};
```
- 在模板中使用`v - on`指令:
```vue
<template>
<div>
<button v - on:click="increment">Increment</button>
</div>
</template>
```
- 也可以简写为:
```vue
<template>
<div>
<button @click="increment">Increment</button>
</div>
</template>
```