互联网技术 · 2024年3月1日

Vue 组件基础知识概述

这篇文章主要介绍了vue 组件基础知识的相关资料,帮助大家更好的理解和使用vue的组件,感兴趣的朋友可以了解下

组件基础

1 组件的复用

组件是可复用的Vue实例。

<!DOCTYPE html>
<html>
 <head>
  <meta charset=”utf-8″> 
  <style>
  
  </style>
  <script src=”https://cdn.staticfile.org/vue/2.4.2/vue.min.js”></script>
 </head>
 <body>
  <div id=”app”>
   <button-counter></button-counter>
   <button-counter></button-counter>
   <button-counter></button-counter>
  </div>
  <script>
   // 定义一个名为 button-counter 的新组件
   Vue.component(button-counter, {
    data: function () {
     return {
      count: 0
     }
    },
    template: <button v-on:click=”count++”>点击了 {{ count }} 次.</button>
   });

   new Vue({ el: #app });
  </script>
 </body>
</html>

注意当点击按钮时,每个组件都会各自独立维护它的count。这里自定义组件的data属性必须是一个函数,每个实例维护一份被返回对象的独立的拷贝。

<!DOCTYPE html>
<html>
 <head>
  <meta charset=”utf-8″> 
  <style>
  
  </style>
  <script src=”https://cdn.staticfile.org/vue/2.4.2/vue.min.js”></script>
 </head>
 <body>
  <div id=”app”>
   <button-counter></button-counter>
   <button-counter></button-counter>
   <button-counter></button-counter>
  </div>
  <script>
   var buttonCounterData = {
    count: 0
   }
   // 定义一个名为 button-counter 的新组件
   Vue.component(button-counter, {
    data: function () {
     return buttonCounterData
    },
    template: <button v-on:click=”count++”>点击了 {{ count }} 次.</button>
   });

   new Vue({ el: #app });
  </script>
 </body>
</html>

2 通过 Prop 向子组件传递数据

<!DOCTYPE html>
<html>
 <head>
  <meta charset=”utf-8″> 
  <style>
  
  </style>
  <script src=”https://cdn.staticfile.org/vue/2.4.2/vue.min.js”></script>
 </head>
 <body>
  <div id=”app”>
   <blog-post title=”My journey with Vue”></blog-post>
   <blog-post title=”Blogging with Vue”></blog-post>
   <blog-post title=”Why Vue is so fun”></blog-post>
  </div>
  <script>
   Vue.component(blog-post, {
    props: [title],
    template: <h3>{{ title }}</h3>
   })

   new Vue({ el: #app });
  </script>
 </body>
</html>

这里组件就是通过自定义属性title来传递数据。

我们可以使用v-bind来动态传递prop。

<!DOCTYPE html>
<html>
 <head>
  <meta charset=”utf-8″> 
  <style>
  
  </style>
  <script src=”https://cdn.staticfile.org/vue/2.4.2/vue.min.js”></script>
 </head>
 <body>
  <div id=”app”>
   <blog-post v-for=”post in posts” v-bind:key=”post.id” v-bind:title=”post.title”></blog-post>
  </div>
  <script>
   Vue.component(blog-post, {
    props: [title],
    template: <h3>{{ title }}</h3>
   })

   new Vue({
    el: #app,
    data: {
     posts: [
      { id: 1, title: My journey with Vue },
      { id: 2, title: Blogging with Vue },
      { id: 3, title: Why Vue is so fun }
     ]
    }
   });
  </script>
 </body>
</html>

3 单个根元素

每个组件必须只有一个根元素。

<!DOCTYPE html>
<html>
 <head>
  <meta charset=”utf-8″> 
  <style>
  
  </style>
  <script src=”https://cdn.staticfile.org/vue/2.4.2/vue.min.js”></script>
 </head>
 <body>
  <div id=”app”>
   <blog-post v-for=”post in posts” v-bind:key=”post.id” v-bind:post=”post”></blog-post>
  &

OpenMagic API

Need more than content? Move into the product flow.

If you are here for model access, pricing, developer docs, or the future API console, the dedicated product path now lives on api.openmagic.ai.