【web高级 01vue 】 vue预习课03 模板语法

模板语法03–模板语法


在这里插入图片描述
在这里插入图片描述

vue模板语法

vue.js使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。所以Vue.js的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析。


插值文本

数据绑定最常见的形式就是使用"Mustache"语法(双大括号)的文本插值
范例:设置标题

 <h2 >
   <!-- 插值文本 -->
   {
    
    {
    
    title}}
</h2>

插值文本

在这里插入图片描述


在这里插入图片描述


特性

在这里插入图片描述
Mustache 语法不能作用在 HTML attribute 上,遇到这种情况应该使用 v-bind 指令:
范例:设置标题

<!-- 特性、属性值绑定使用v-bind命令 -->
<h2  v-bind:title="title">
...
</h2>

列表渲染

一、用 v-for 把一个数组对应为一组元素
我们可以用 v-for 指令基于一个数组来渲染一个列表。v-for 指令需要使用 item in items 形式的特殊语法,其中 items 是源数据数组,而 item 则是被迭代的数组元素的别名。

<ul id="example-1">
  <li v-for="item in items" :key="item.message">
    {
    
    {
    
     item.message }}
  </li>
</ul>
var example1 = new Vue({
    
    
  el: '#example-1',
  data: {
    
    
    items: [
      {
    
     message: 'Foo' },
      {
    
     message: 'Bar' }
    ]
  }
})

在这里插入图片描述

  • v-for 还支持一个可选的第二个参数,即当前项的索引。
<ul id="example-2">
  <li v-for="(item, index) in items">
    {
    
    {
    
     parentMessage }} - {
    
    {
    
     index }} - {
    
    {
    
     item.message }}
  </li>
</ul>
var example2 = new Vue({
    
    
  el: '#example-2',
  data: {
    
    
    parentMessage: 'Parent',
    items: [
      {
    
     message: 'Foo' },
      {
    
     message: 'Bar' }
    ]
  }
})

在这里插入图片描述

二、在 v-for 里使用对象

  • 你也可以用 v-for 来遍历一个对象的 property。
<ul id="v-for-object" class="demo">
  <li v-for="value in object">
    {
    
    {
    
     value }}
  </li>
</ul>
new Vue({
    
    
  el: '#v-for-object',
  data: {
    
    
    object: {
    
    
      title: 'How to do lists in Vue',
      author: 'Jane Doe',
      publishedAt: '2016-04-10'
    }
  }
})

在这里插入图片描述

  • 你也可以提供第二个的参数为 property 名称 (也就是键名):
<div v-for="(value, name) in object">
  {
    
    {
    
     name }}: {
    
    {
    
     value }}
</div>

在这里插入图片描述

  • 还可以用第三个参数作为索引:
<div v-for="(value, name, index) in object">
  {
    
    {
    
     index }}. {
    
    {
    
     name }}: {
    
    {
    
     value }}
</div>

在这里插入图片描述

列表渲染


表单输入绑定

你可以用 v-model 指令在表单 、 及 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖。它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

<input v-model="food"  type="text" v-on:keydown.enter="addCourse">

表单输入绑定


事件处理

可以用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。
范例:增加食物

<!-- 事件处理 -->
<button v-on:click="addFood">新增</button>

const app =  new Vue({
    
    
    el:"#app",
    data() {
    
    
        return {
    
    
            food:"",
            foodList:["萝卜","白菜"]
        }
    },
    methods: {
    
    
        addFood() {
    
    
            this.foodList.push(this.food);
            this.food = "";
        }
    },
});

事件处理


class与style绑定

操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attribute,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 classstyle 时,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组。

范例:点选样式

 <style>
    .active {
    
    
        background: #ddd;
    }
    
</style>


 <!-- class动态绑定-->
<div v-for="item in foodList" :key="item" :class="{active:selectedFood == item}" @click="selectedFood = item"> 
    <!-- 冒号前面的key为class的名称,取决于 冒号后面的表达式 -->
   {
    
    {
    
    item}} 
</div> 


<!-- style动态绑定 -->
<div v-for="item in foodList" :key="item" :style="{backgroundColor:selectedFood == item ? '#ddd' : 'transparent' }"
    @click="selectedFood = item">
    <!--   
        :style="{backgroundColor:selectedFood == item ? '#ddd' : 'red' }"    
        :style="{'background-color':selectedFood == item ? '#ddd' : 'red' }"
    -->
    <!--
        对象中,冒号前面的为style,可以用  'background-color'  或者 backgroundColor  
        冒号后面为背景色的值
    -->
    {
    
    {
    
    item}}
</div>

const app = new Vue({
    
    
    el: "#app",
    data() {
    
    
        return {
    
    
            selectedFood: "",
        }
    },
  
});

Class 与 Style 绑定


条件渲染

v-if 指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。
范例:没有数据的时候的显示

<!-- 条件 编译-->
<p v-if="foodList.length == 0">没有数据</p>
<!--  v-else 配合 v-if 使用 -->
<div class="food_list"  v-else >
    <div v-for="item in foodList" :key="item.id"
        :style="{backgroundColor:selectedFood == item.id ? '#ddd' : 'transparent' }"
        @click="selectedFood = item.id">
        {
   
   {item.name}}
    </div>
</div>

条件渲染

v-show vs v-if

  • v-show通过css属性display控制元素显示,元素总是存在
  • v-if惰性渲染元素,若一开始条件为falsy,元素是不存在的

猜你喜欢

转载自blog.csdn.net/weixin_42580704/article/details/110187264