1-2-vue框架-基础-模板语法和指令

模板语法

Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。
指令和模板语言要结合使用

下面的学习,都使用vue3来学习,
vue介绍,使用vue创建项目:https://www.cnblogs.com/andy0816/p/15072167.html
都在项目中进行模板语法的学习,

文本插值:使用花括号{{ msg }}

<template>
<H1>{{msg}}</H1>
<p>{{msg}}</p>
</template>


<script>
  export default {
    data(){
      return {
        msg:"学习vue"
      }
    }
  }

</script>

使用 JavaScript 表达式​

至此,我们仅在模板中绑定了一些简单的属性名。但是 Vue 实际上在所有的数据绑定中都支持完整的 JavaScript 表达式:

{{ number + 1 }}

{{ ok ? 'YES' : 'NO' }}

{{ message.split('').reverse().join('') }}

<div :id="`list-${id}`"></div>

这些表达式都会被作为 JavaScript ,以当前组件实例为作用域解析执行。
js表达式一定要有单一结果,
一个简单的判断方法是是否可以合法地写在 return 后面。

因此,下面的例子都是无效的:

template
<!-- 这是一个语句,而非表达式 -->
{{ var a = 1 }}

<!-- 条件控制也不支持,请使用三元表达式 -->
{{ if (ok) { return message } }}

指令v-html

<p>Using text interpolation: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

双大括号会将数据解释为纯文本,而不是 HTML。若想插入 HTML,你需要使用 v-html 指令
这里我们遇到了一个新的概念。这里看到的 v-html attribute 被称为一个指令。
下面会学习很多的指令

指令v-bind

<template>

<p>{{msg}}</p>
<p v-bind:id = "msg">{{msg}}</p>
</template>


<script>
  export default {
    data(){
      return {
        msg: '页面加载于 ' + new Date().toLocaleString(),
      }
    }
  }

</script>
  • v-bind 指令指示 Vue 将元素的 id attribute 与组件的 dynamicId 属性保持一致。

因为 v-bind 非常常用,我们提供了特定的简写语法:

<div :id="dynamicId"></div>

这种方法可以绑定各种属性,

<a :href="url"> ... </a>

<button :disabled="isButtonDisabled">Button</button>

条件渲染

条件v-if

<template>
  <p v-if="seen">现在你看到我了</p>
</template>

<script>
  export default {
    data(){
      return {
       seen:true
      }
    }
  }

</script>
  • 很明显,可以通过seen: true或者false,进行控制是否显示
  • 至于这个指令是如何运行的,怎么就能达到了这个效果,现在不去深究,后面再说

v-if v-else

v-if判断语句之用,v-else则是和v-if一起出现,
当v-if判断为true时,v-else不执行;
当v-if判断为false时,v-else才执行。

<template>
<button @click="awesome = !awesome">Toggle</button>

<h1 v-if="awesome">Vue is awesome!</h1>
<h1 v-else>Oh no 😢</h1>
</template>


<script>
  export default {
    data(){
      return {
       awesome:true
      }
    }
  }
</script>

这是官网的一个案例,

v-else-if​

顾名思义,v-else-if 提供的是相应于 v-if 的“else if 区块”。它可以连续多次重复使用:

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>

v-show​

另一个可以用来按条件显示一个元素的指令是 v-show。其用法基本一样:

<h1 v-show="ok">Hello!</h1>

不同之处在于 v-show 会在 DOM 渲染中保留该元素;v-show 仅切换了该元素上名为 display 的 CSS 属性。
v-show 不支持在 template 元素上使用,也不能和 v-else 搭配使用。

列表渲染:

循环v-for

我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法,其中 items 是源数据的数组,而 item 是迭代项的别名:

data() {
  return {
    items: [{ message: 'Foo' }, { message: 'Bar' }]
  }
}
<li v-for="item in items">
  {{ item.message }}
</li>

v-for 索引

在 v-for 块中可以完整地访问父作用域内的属性和变量。v-for 也支持使用可选的第二个参数表示当前项的位置索引。

data() {
  return {
    parentMessage: 'Parent',
    items: [{ message: 'Foo' }, { message: 'Bar' }]
  }
}
<li v-for="(item, index) in items">
  {{ parentMessage }} - {{ index }} - {{ item.message }}
</li>

Parent - 0 - Foo
Parent - 1 - Bar

v-for 与对象​

你也可以使用 v-for 来遍历一个对象的所有属性。遍历的顺序会基于对该对象调用 Object.keys() 的返回值来决定。

data() {
  return {
    myObject: {
      title: 'How to do lists in Vue',
      author: 'Jane Doe',
      publishedAt: '2016-04-10'
    }
  }
}
<ul>
  <li v-for="value in myObject">
    {{ value }}
  </li>
</ul>

可以通过提供第二个参数表示属性名 (例如 key):

<li v-for="(value, key) in myObject">
  {{ key }}: {{ value }}
</li>

第三个参数表示位置索引:

<li v-for="(value, key, index) in myObject">
  {{ index }}. {{ key }}: {{ value }}
</li>

事件监听

v-on

我们可以使用 v-on 指令 (简写为 @) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click="handler" 或 @click="handler"。

事件处理器 (handler) 的值可以是:

内联事件处理器:事件被触发时执行的内联 JavaScript 语句 (与 onclick 类似)。

方法事件处理器:一个指向组件上定义的方法的属性名或是路径。

内联事件处理器

内联事件处理器通常用于简单场景,例如:

data() {
  return {
    count: 0
  }
}
<button @click="count++">Add 1</button>
<p>Count is: {{ count }}</p>

方法事件处理器​

随着事件处理器的逻辑变得愈发复杂,内联代码方式变得不够灵活。因此 v-on 也可以接受一个方法名或对某个方法的调用。

举例来说:

data() {
  return {
    name: 'Vue.js'
  }
},
methods: {
  greet(event) {
    // 方法中的 `this` 指向当前活跃的组件实例
    alert(`Hello ${this.name}!`)
    // `event` 是 DOM 原生事件
    if (event) {
      alert(event.target.tagName)
    }
  }
}
<!-- `greet` 是上面定义过的方法名 -->
<button @click="greet">Greet</button>
  • 为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器,
    通过它调用在 Vue 实例中定义的方法

  • 所有的 DOM 操作都由 Vue 来处理,你编写的代码只需要关注逻辑层面即可。
    这是vue厉害的地方,不需要操作dom,就关心逻辑就可以了,

表单输入绑定

双向绑定 v-model

在前端处理表单时,我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦,
v-model 指令帮我们简化了这一步骤:

<template>
<p>Message is: {{ message }}</p>
<input v-model="message" placeholder="edit me" />
</template>

<script>
  export default {
    data(){
      return {
       message:"hello"
      }
    }
  }

</script>
  • v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。
  • 是可以修改的,修改了输入框里面的,然后上面显示的内容是跟随变化的,

指令列表

  • 上面介绍了一些常用的指令,
  • 那指令到底有多少??https://cn.vuejs.org/v2/api/#指令
    1,v-text
    2,v-html
    3,v-show
    4,v-if
    5,v-else
    6,v-else-if
    7,v-for
    8,v-on
    9,v-bind
    10,v-model
    11,v-slot
    12,v-pre
    13,v-cloak
    14,v-once

注意两个缩写

v-bind 缩写
<!-- 完整语法 -->
<a v-bind:href="url">...</a>
<!-- 缩写 -->
<a :href="url">...</a>
<!-- 动态参数的缩写 (2.6.0+) -->
<a :[key]="url"> ... </a>

v-on 缩写
<!-- 完整语法 -->
<a v-on:click="doSomething">...</a>
<!-- 缩写 -->
<a @click="doSomething">...</a>
<!-- 动态参数的缩写 (2.6.0+) -->
<a @[event]="doSomething"> ... </a>

注意指令的配合

<div v-if="type === 'A'">
  A
</div>
<div v-else-if="type === 'B'">
  B
</div>
<div v-else-if="type === 'C'">
  C
</div>
<div v-else>
  Not A/B/C
</div>
posted @ 2021-10-28 02:43  技术改变命运Andy  阅读(252)  评论(0编辑  收藏  举报