跳转到内容

Vue.js模板语法

来自代码酷
Admin留言 | 贡献2025年5月1日 (四) 23:23的版本 (Page creation by admin bot)

(差异) ←上一版本 | 已核准修订 (差异) | 最后版本 (差异) | 下一版本→ (差异)

Vue.js模板语法[编辑 | 编辑源代码]

Vue.js的模板语法是一种基于HTML的扩展语法,允许开发者以声明式的方式将数据绑定到DOM(文档对象模型)。Vue.js的模板语法设计简洁且直观,使开发者能够轻松构建动态用户界面。

介绍[编辑 | 编辑源代码]

Vue.js的模板语法是Vue.js的核心特性之一,它允许开发者通过简单的HTML标记扩展来动态渲染数据。Vue.js的模板语法主要包括以下几种形式:

  • **插值**:使用双大括号`{{ }}`将数据绑定到文本内容。
  • **指令**:以`v-`为前缀的特殊属性,用于动态绑定属性或执行逻辑。
  • **过滤器**(Vue 2.x支持):用于格式化文本显示。
  • **计算属性与方法**:在模板中调用方法或计算属性。

Vue.js的模板语法是响应式的,当数据发生变化时,视图会自动更新。

插值[编辑 | 编辑源代码]

插值是Vue.js模板语法中最基础的部分,用于将数据绑定到文本内容。

文本插值[编辑 | 编辑源代码]

最简单的插值形式是使用双大括号`{{ }}`包裹变量名:

<div id="app">
  {{ message }}
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    message: 'Hello, Vue.js!'
  }
});

输出:

Hello, Vue.js!

原始HTML插值[编辑 | 编辑源代码]

如果数据包含HTML标签,可以使用`v-html`指令渲染原始HTML:

<div id="app" v-html="rawHtml"></div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    rawHtml: '<span style="color: red;">This is red text.</span>'
  }
});

输出: This is red text.

指令[编辑 | 编辑源代码]

指令是带有`v-`前缀的特殊属性,用于动态绑定或执行逻辑。

`v-bind` 绑定属性[编辑 | 编辑源代码]

`v-bind`用于动态绑定HTML属性:

<div id="app">
  <a v-bind:href="url">Visit Vue.js</a>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    url: 'https://vuejs.org'
  }
});

输出: <a href="https://vuejs.org">Visit Vue.js</a>

`v-bind`可以简写为`:`:

<a :href="url">Visit Vue.js</a>

`v-on` 事件绑定[编辑 | 编辑源代码]

`v-on`用于监听DOM事件:

<div id="app">
  <button v-on:click="sayHello">Click me</button>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  methods: {
    sayHello: function() {
      alert('Hello, Vue.js!');
    }
  }
});

`v-on`可以简写为`@`:

<button @click="sayHello">Click me</button>

`v-model` 双向数据绑定[编辑 | 编辑源代码]

`v-model`用于在表单元素上实现双向数据绑定:

<div id="app">
  <input v-model="message" placeholder="Type something">
  <p>You typed: {{ message }}</p>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    message: ''
  }
});

当用户在输入框中输入内容时,`message`会实时更新,并显示在`

`标签中。

条件渲染[编辑 | 编辑源代码]

Vue.js提供`v-if`、`v-else`和`v-show`指令来控制元素的显示与隐藏。

`v-if` 和 `v-else`[编辑 | 编辑源代码]

<div id="app">
  <p v-if="showMessage">This is shown if showMessage is true.</p>
  <p v-else>This is shown otherwise.</p>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    showMessage: true
  }
});

`v-show`[编辑 | 编辑源代码]

`v-show`与`v-if`类似,但`v-show`仅切换CSS的`display`属性,而`v-if`会完全移除DOM元素:

<div id="app">
  <p v-show="isVisible">This is visible.</p>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    isVisible: true
  }
});

列表渲染[编辑 | 编辑源代码]

`v-for`指令用于渲染列表数据:

<div id="app">
  <ul>
    <li v-for="item in items">{{ item.text }}</li>
  </ul>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    items: [
      { text: 'Item 1' },
      { text: 'Item 2' },
      { text: 'Item 3' }
    ]
  }
});

输出:

  • Item 1
  • Item 2
  • Item 3

计算属性和方法[编辑 | 编辑源代码]

Vue.js允许在模板中调用计算属性或方法,以动态计算值。

计算属性[编辑 | 编辑源代码]

计算属性基于依赖的响应式数据缓存结果:

<div id="app">
  <p>Original message: "{{ message }}"</p>
  <p>Reversed message: "{{ reversedMessage }}"</p>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    message: 'Hello'
  },
  computed: {
    reversedMessage: function() {
      return this.message.split('').reverse().join('');
    }
  }
});

输出:

Original message: "Hello"
Reversed message: "olleH"

方法调用[编辑 | 编辑源代码]

方法可以在模板中直接调用:

<div id="app">
  <p>Reversed message: "{{ reverseMessage() }}"</p>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    message: 'Hello'
  },
  methods: {
    reverseMessage: function() {
      return this.message.split('').reverse().join('');
    }
  }
});

实际案例[编辑 | 编辑源代码]

以下是一个简单的待办事项列表应用,展示Vue.js模板语法的实际应用:

<div id="app">
  <input v-model="newTodo" @keyup.enter="addTodo" placeholder="Add a new task">
  <ul>
    <li v-for="(todo, index) in todos">
      {{ todo.text }}
      <button @click="removeTodo(index)">×</button>
    </li>
  </ul>
</div>

对应的JavaScript代码:

new Vue({
  el: '#app',
  data: {
    newTodo: '',
    todos: [
      { text: 'Learn Vue.js' },
      { text: 'Build a project' }
    ]
  },
  methods: {
    addTodo: function() {
      if (this.newTodo.trim()) {
        this.todos.push({ text: this.newTodo });
        this.newTodo = '';
      }
    },
    removeTodo: function(index) {
      this.todos.splice(index, 1);
    }
  }
});

总结[编辑 | 编辑源代码]

Vue.js的模板语法提供了一种简洁而强大的方式来构建动态用户界面。通过插值、指令、条件渲染和列表渲染,开发者可以轻松实现数据绑定和DOM操作。计算属性和方法进一步增强了模板的动态性,使代码更易于维护和扩展。