Menu
×

Được chứng nhận

Ghi lại kiến ​​thức của bạn

Đăng nhập Đăng ký

Tạo Tài khoản Example.com.vn miễn phí để cải thiện trải nghiệm học tập của bạn

Người tìm đường và việc học của tôi

Theo dõi tiến độ học tập của bạn tại Example.com.vn và thu thập phần thưởng

Nâng cấp

Trở thành người dùng PLUS và mở khóa các tính năng mạnh mẽ (không có quảng cáo, lưu trữ, hỗ trợ, ..)

Bắt đầu từ đâu

Bạn không chắc chắn muốn bắt đầu từ đâu? Đi theo con đường được hướng dẫn của chúng tôi

Trình chỉnh sửa mã (Dùng thử)

Với trình chỉnh sửa mã trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã và xem kết quả trong trình duyệt của mình

Video

Tìm hiểu những điều cơ bản về HTML qua video hướng dẫn thú vị và hấp dẫn

Mẫu

Chúng tôi đã tạo một loạt mẫu trang web đáp ứng mà bạn có thể sử dụng - miễn phí!

Web hosting

Lưu trữ trang web của riêng bạn và chia sẻ nó với mọi người với Example.com.vn Spaces

Tạo một máy chủ

Tạo máy chủ của riêng bạn bằng Python, PHP, React.js, Node.js, Java, C#, v.v.

Làm thế nào để

Bộ sưu tập lớn các đoạn mã cho HTML, CSS và JavaScript

Khung CSS

Xây dựng các trang web nhanh và phản hồi bằng cách sử dụng khung W3.CSS miễn phí của chúng tôi

Thống kê trình duyệt

Đọc xu hướng dài hạn của việc sử dụng trình duyệt

Tốc độ gõ

Kiểm tra tốc độ đánh máy của bạn

Đào tạo AWS

Tìm hiểu dịch vụ web của Amazon

Bộ chọn màu

Sử dụng công cụ chọn màu của chúng tôi để tìm các màu RGB, HEX và HSL khác nhau. Bánh xe màu hình tròn thể hiện sự chuyển màu trong quang phổ

Trò chơi mã

Trò chơi mã hóa W3Schools! Giúp linh miêu thu thập nón thông Logo Lynx

Đặt mục tiêu

Nhận hành trình học tập được cá nhân hóa dựa trên các kỹ năng và mục tiêu hiện tại của bạn

Bản tin

Tham gia bản tin của chúng tôi và có quyền truy cập vào nội dung độc quyền mỗi tháng

Việc làm

Thuê những tài năng công nghệ hàng đầu. Hợp lý hóa quy trình tuyển dụng của bạn để có đội ngũ phù hợp hoàn hảo

Lớp học

Hãy liên hệ để sử dụng Example.com.vn Plus và các chứng chỉ với tư cách là một tổ chức giáo dục

×
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP CÁCH W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS AN NINH MẠNG DỮ LIỆU KHOA HỌC

Hướng dẫn Vue

Vue HOME Vue Giới thiệu Vue Chỉ thị Vue v-bind Vue v-if Vue v-show Vue v-for Vue Sự kiện Vue v-on Vue Methods Vue Event Modifier Vue Forms Vue v-model Vue CSS Binding Vue Tính toán Thuộc tính Vue Watchers Vue Mẫu

Mở rộng quy mô

Vue Tại sao, Cách thức và Thiết lập Trang SFC đầu tiên của Vue Thành phần Vue Đạo cụ Vue Vue v-for Thành phần Vue $emit() Vue Thuộc tính dự phòng Vue Kiểu dáng có phạm vi Vue Thành phần cục bộ Vue Slots Vue v-slot Vue Scoped Slots Vue Thành phần động Vue Teleport Vue Yêu cầu HTTP Mẫu Vue Tham chiếu Vòng đời Vue Móc nối Vue Cung cấp/Tiêm Vue Định tuyến Vue Đầu vào biểu mẫu Vue Vue Animations Vue Animations với v-for Vue Build Vue Composition API

Tham khảo Vue

Thuộc tính tích hợp của Vue Các thành phần tích hợp của Vue Các phần tử tích hợp Vue Ví dụ thành phần Vue Chỉ thị Vue Tùy chọn phiên bản Vue Móc vòng đời Vue

Vue Ví dụ

Ví dụ về Vue Bài tập Vue Vue Quiz Vue Server Chứng chỉ Vue

đạo cụ Vue

Props là một tùy chọn cấu hình trong Vue.

Với đạo cụ, chúng ta có thể truyền dữ liệu đến các thành phần thông qua các thuộc tính tùy chỉnh cho thẻ thành phần.

Truyền dữ liệu tới một thành phần

Bạn có nhớ ví dụ ở trang trước trong đó cả ba thành phần đều nói 'Apple' không? Với đạo cụ, giờ đây chúng ta có thể truyền dữ liệu xuống các thành phần của mình để cung cấp cho chúng nội dung khác nhau và làm cho chúng trông khác biệt.

Hãy tạo một trang đơn giản để hiển thị 'Táo', 'Pizza' và 'Gạo'.

Trong tệp ứng dụng chính App.vue chúng ta tạo thuộc tính 'food-name' của riêng mình để truyền prop với các thẻ thành phần <food-item/> :

App.vue :

 <template>
  <h1>Food</h1>
  <food-item food-name="Apples"/>
  <food-item food-name="Pizza"/>
  <food-item food-name="Rice"/>
</template>

<script></script>

<style>
  #app > div {
    border: dashed black 1px;
    display: inline-block;
    width: 120px;
    margin: 10px;
    padding: 10px;
    background-color: lightgreen;
  }
</style>

Nhận dữ liệu bên trong một thành phần

Để nhận dữ liệu được gửi qua thuộc tính 'food-item' từ App.vue chúng tôi sử dụng tùy chọn cấu hình 'props' mới này. Chúng tôi liệt kê các thuộc tính nhận được để tệp thành phần *.vue của chúng tôi biết về chúng và bây giờ chúng tôi có thể sử dụng các đạo cụ ở bất cứ đâu chúng tôi muốn giống như cách chúng tôi sử dụng thuộc tính dữ liệu.

FoodItem.vue :

 <script>
  export default {
    props: [
      'foodName'
    ]
  }
</script>

Thuộc tính props được viết bằng dấu gạch ngang - để phân tách các từ (kebab-case) trong thẻ <template> , nhưng kebab-case không hợp pháp trong JavaScript. Vì vậy, thay vào đó chúng ta cần viết tên thuộc tính dưới dạng CamelCase trong JavaScript và Vue sẽ tự động hiểu điều này!

Cuối cùng, ví dụ của chúng tôi với các phần tử <div> cho 'Táo', 'Pizza' và 'Gạo' trông như thế này:

Ví dụ

App.vue :

 <template>
  <h1>Food</h1>
  <food-item food-name="Apples"/>
  <food-item food-name="Pizza"/>
  <food-item food-name="Rice"/>
</template>

FoodItem.vue :

 <template>
  <div>
    <h2>{{ foodName }}</h2>
  </div>
</template>

<script>
  export default {
    props: [
      ' foodName '
    ]
  }
</script>

<style></style>
Chạy ví dụ »

Chúng ta sẽ sớm biết cách chuyển các loại dữ liệu khác nhau dưới dạng thuộc tính props cho các thành phần, nhưng trước khi làm điều đó, hãy mở rộng mã của chúng ta bằng phần mô tả về từng loại thực phẩm và đặt các phần tử <div> thực phẩm bên trong một trình bao bọc Flexbox.

Ví dụ

App.vue :

 <template>
  <h1>Food</h1>
  <div id="wrapper">
    <food-item
      food-name="Apples"
      food-desc="Apples are a type of fruit that grow on trees."/>
    <food-item
      food-name="Pizza"
      food-desc="Pizza has a bread base with tomato sauce, cheese, and toppings on top."/>
    <food-item
      food-name="Rice"
      food-desc="Rice is a type of grain that people like to eat."/>
  </div>
</template>

<script></script>

<style>
  #wrapper {
    display: flex;
    flex-wrap: wrap;
  }
  #wrapper > div {
    border: dashed black 1px;
    margin: 10px;
    padding: 10px;
    background-color: lightgreen;
  }
</style>

FoodItem.vue :

 <template>
  <div>
    <h2>{{ foodName }}</h2>
    <p>{{ foodDesc }}</p>
  </div>
</template>

<script>
  export default {
    props: [
      'foodName',
      'foodDesc'
    ]
  }
</script>

<style></style>
Chạy ví dụ »

Đạo cụ Boolean

Chúng tôi có thể đạt được các chức năng khác nhau bằng cách chuyển các props của các loại dữ liệu khác nhau và chúng tôi có thể xác định các quy tắc về cách cung cấp các thuộc tính khi các thành phần được tạo từ App.vue .

Hãy thêm một chỗ dựa mới 'isFavorite'. Đây phải là một giá trị boolean có giá trị true hoặc false để chúng ta có thể sử dụng trực tiếp với v-show để hiển thị thẻ tem yêu thích <img> nếu món ăn được coi là món ăn được yêu thích.

Để truyền props có kiểu dữ liệu khác với String, chúng ta phải viết v-bind: trước thuộc tính mà chúng ta muốn truyền.

Đây là cách chúng tôi chuyển prop boolean 'isFavorite' từ App.vue dưới dạng thuộc tính 'is-favorite':

App.vue :

 <template>
  <h1>Food</h1>
  <p>My favorite food has a diploma image attached to it.</p>
  <div id="wrapper">
    <food-item
      food-name="Apples"
      food-desc="Apples are a type of fruit that grow on trees."
      v-bind:is-favorite="true"/>
    <food-item
      food-name="Pizza"
      food-desc="Pizza has a bread base with tomato sauce, cheese, and toppings on top."
      v-bind:is-favorite="false"/>
    <food-item
      food-name="Rice"
      food-desc="Rice is a type of grain that people like to eat."
      v-bind:is-favorite="false"/>
  </div>
</template>

Chúng tôi nhận được giá trị boolean 'isFavorite' bên trong FoodItem.vue và hiển thị tem yêu thích nếu món ăn được coi là yêu thích:

Ví dụ

FoodItem.vue :

 <template>
  <div>
    <h2>
      {{ foodName }}
      <img src="/img_quality.svg" v-show="isFavorite">
    </h2>
    <p>{{ foodDesc }}</p>
  </div>
</template>

<script>
  export default {
      props: ['foodName','foodDesc','isFavorite']
  }
</script>

<style>
  img {
    height: 1.5em;
    float: right;
  }
</style>
Chạy ví dụ »

Hình ảnh: Để làm cho hình ảnh trong ví dụ trên hoạt động cục bộ trong dự án trên máy của bạn, hãy mở ví dụ trên, nhấp chuột phải vào hình ảnh, chọn "Save Image As..." và lưu nó vào thư mục "public" trong dự án của bạn .


Giao diện đạo cụ

Trong ví dụ trên, dựa trên mã bên trong FoodItem.vue , chúng tôi không thể biết chắc chắn rằng mình nhận được prop 'isFavorite' và chúng tôi không thể biết chắc liệu đó có phải là giá trị boolean hay không. Để giúp chúng tôi thực hiện điều này, chúng tôi có thể xác định loại dữ liệu của đạo cụ mà chúng tôi nhận được, chúng tôi có thể đặt đạo cụ là bắt buộc và thậm chí chúng tôi có thể tạo các hàm xác thực để xác thực các đạo cụ mà chúng tôi nhận được.

Việc xác định các đạo cụ mà chúng tôi nhận được sẽ đóng vai trò là tài liệu cho những người khác nếu bạn làm việc theo nhóm và nó cung cấp cho chúng tôi các cảnh báo trong bảng điều khiển nếu các quy tắc mà chúng tôi đã xác định bị vi phạm.


Đạo cụ như một đối tượng

Trong FoodItem.vue , chúng tôi nhận xét cách chúng tôi xác định các props trong một mảng để lấy nó làm tham chiếu và thay vào đó xác định các props trong một đối tượng. Chúng ta cũng có thể xác định kiểu dữ liệu của từng prop ngoài tên prop, như sau:

FoodItem.vue :

 <script>
  export default {
    // props: ['foodName','foodDesc','isFavorite']
    props: {
      foodName: String,
      foodDesc: String,
      isFavorite: Boolean
    }
  }
</script>

Với các đạo cụ được xác định theo cách này, những người khác có thể nhìn vào bên trong FoodItem.vue và dễ dàng xem thành phần đó mong đợi điều gì.

Nếu một thành phần được tạo từ phần tử gốc (trong trường hợp của chúng ta là App.vue ) và được cấp một prop có kiểu dữ liệu sai, bạn sẽ nhận được cảnh báo trong bảng điều khiển, như sau:

Ảnh chụp màn hình cảnh báo chống đỡ kiểu dữ liệu sai

Những cảnh báo như vậy rất hữu ích để chúng tôi và những người khác biết rằng một thành phần không được sử dụng như mong muốn và cho biết điều gì sai để chúng tôi có thể sửa lỗi.


Đạo cụ bắt buộc

Để nói với Vue rằng cần có prop, chúng ta cần xác định prop là một đối tượng. Hãy tạo prop 'foodName' theo yêu cầu, như thế này:

FoodItem.vue :

 <script>
  export default {
    // props: ['foodName','foodDesc','isFavorite']
    props: {
      foodName: {
        type: String,
        required: true
      },
      foodDesc: String,
      isFavorite: Boolean
    }
  }
</script>

Nếu một thành phần được tạo từ phần tử gốc (trong trường hợp của chúng tôi là App.vue ) và một prop bắt buộc không được xác định, bạn sẽ nhận được cảnh báo trong bảng điều khiển, như sau:

Ảnh chụp màn hình cảnh báo chống đỡ cần thiết

Những cảnh báo như vậy rất hữu ích để chúng tôi và những người khác biết rằng một thành phần không được sử dụng như mong muốn và cho biết điều gì sai để chúng tôi có thể sửa lỗi.


Giá trị mặc định

Chúng ta có thể đặt giá trị mặc định cho prop.

Hãy tạo một giá trị mặc định cho prop 'foodDesc' trong thành phần 'FoodItem', sau đó tạo một mục như vậy cho gạo mà không cần xác định prop 'foodDesc':

Ví dụ

App.vue :

 <template>
  <h1>Food</h1>
  <p>My favorite food has a diploma image attached to it.</p>
  <div id="wrapper">
    <food-item
      food-name="Apples"
      food-desc="Apples are a type of fruit that grow on trees."
      v-bind:is-favorite="true"/>
    <food-item
      food-name="Pizza"
      food-desc="Pizza has a bread base with tomato sauce, cheese, and toppings on top."
      v-bind:is-favorite="false"/>
    <food-item
      food-name="Rice"
      food-desc="Rice is a type of grain that people like to eat." 
      v-bind:is-favorite="false"/>
  </div>
</template>

FoodItem.vue :

 <script>
  export default {
    props: {
      foodName: {
        type: String,
        required: true
      },
      foodDesc: {
        type: String,
        required: false,
        default: 'This is the default description.'
      }
      isFavorite: {
        type: Boolean,
        required: false,
        default: false
      }
    }
  }
</script>
Chạy ví dụ »

Chức năng xác thực đạo cụ

Chúng ta cũng có thể định nghĩa một hàm xác thực để quyết định xem giá trị prop có hợp lệ hay không.

Các hàm xác thực như vậy phải trả về đúng hoặc sai. Khi trình xác nhận trả về sai, điều đó có nghĩa là giá trị prop không hợp lệ. Giá trị prop không hợp lệ sẽ tạo ra cảnh báo trong bảng điều khiển trình duyệt khi chúng tôi chạy trang của mình ở chế độ nhà phát triển và cảnh báo là gợi ý hữu ích để đảm bảo các thành phần được sử dụng như dự định.

Giả sử chúng ta muốn mô tả món ăn có độ dài nhất định, từ 20 đến 50 ký tự. Chúng ta có thể thêm chức năng xác thực để đảm bảo mô tả thực phẩm được cung cấp có độ dài hợp lệ.

FoodItem.vue :

 <script>
  export default {
    props: {
      foodName: {
        type: String,
        required: true
      },
      foodDesc: {
        type: String,
        required: false,
        default: 'This is the default description.',
        validator: function(value) {
          if( 20<value.length && value.length<50 ) {
            return true;
          }
          else {
            return false;
          }
        }
      }
      isFavorite: {
        type: Boolean,
        required: false,
        default: false
      }
    }
  }
</script>

Lưu ý: Nếu bạn thêm mã trình xác thực ở trên vào dự án cục bộ của mình, bạn sẽ nhận được cảnh báo ở chế độ phát triển vì mô tả món ăn cho pizza có 65 ký tự, dài hơn 15 ký tự so với chức năng xác thực cho phép.


Sửa đổi đạo cụ

Khi một thành phần được tạo trong phần tử cha, chúng ta không được phép thay đổi giá trị của prop nhận được trong phần tử con. Vì vậy bên trong FoodItem.vue chúng ta không thể thay đổi giá trị của prop 'isFavorite' mà chúng ta nhận được từ App.vue . Prop ở chế độ chỉ đọc từ cha mẹ, đó là App.vue trong trường hợp của chúng tôi.

Nhưng giả sử chúng tôi muốn người dùng có thể thay đổi món ăn nào được coi là yêu thích bằng cách nhấp vào nút. Bây giờ cần phải thay đổi prop 'isFavorite', nhưng chúng ta không thể làm điều đó vì nó chỉ được đọc.

Chúng tôi không được phép thay đổi 'isFavorite'. Điều này sẽ tạo ra một lỗi.

 methods: {
  toggleFavorite() { 
    this.isFavorite = !this.isFavorite;
  }
}

Để giải quyết vấn đề này, chúng ta có thể sử dụng prop để khởi tạo giá trị dữ liệu mới 'foodIsFavorite', bên trong FoodItem.vue , như thế này:

 data() {
  return { 
    foodIsFavorite: this.isFavorite
  }
}

Và bây giờ chúng ta có thể thêm một phương thức để người dùng có thể chuyển đổi giá trị dữ liệu mới này:

 methods: {
  toggleFavorite() { 
    this.foodIsFavorite = !this.foodIsFavorite;
  }
}

Chúng ta cũng phải thêm nút chuyển đổi cho từng mặt hàng thực phẩm và thay đổi v-show trong thẻ <img> để phụ thuộc vào thuộc tính dữ liệu mới 'foodIsFavorite'. Và để làm cho ví dụ của chúng ta đơn giản hơn, chúng ta cũng thu gọn phần khai báo props thành một mảng.

Ví dụ

FoodItem.vue :

 <template>
  <div>
    <h2>
      {{ foodName }}
      <img src="/img_quality.svg" v-show="foodIsFavorite">
    </h2>
    <p>{{ foodDesc }}</p>
    <button v-on:click="toggleFavorite">Favorite</button>
  </div>
</template>

<script>
  export default {
  props: ['foodName','foodDesc','isFavorite'],
  data() {
    return {
      foodIsFavorite: this.isFavorite
    }
  },
  methods: {
    toggleFavorite() {
      this.foodIsFavorite = !this.foodIsFavorite;
    }
  }
}
</script>

<style>
  img {
    height: 1.5em;
    float: right;
  }
</style>
Chạy ví dụ »

Bài tập Vue

Kiểm tra bản thân bằng các bài tập

Bài tập:

Chúng ta phải viết gì trong một thành phần để nó nhận dữ liệu được gửi qua thuộc tính 'fish-name' từ App.vue dưới dạng chỗ dựa?

<kịch bản>
  xuất mặc định {
    : [
      ' '
    ]
  }
</script>

Bắt đầu bài tập



×

Liên hệ bán hàng

Nếu bạn muốn sử dụng dịch vụ của Example.com.vn với tư cách là một tổ chức giáo dục, nhóm hoặc doanh nghiệp, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Báo cáo lỗi

Nếu bạn muốn báo cáo lỗi hoặc nếu bạn muốn đưa ra đề xuất, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Example.com.vn được tối ưu hóa cho việc học tập và đào tạo. Các ví dụ có thể được đơn giản hóa để cải thiện khả năng đọc và học. Các hướng dẫn, tài liệu tham khảo và ví dụ liên tục được xem xét để tránh sai sót, nhưng chúng tôi không thể đảm bảo tính chính xác hoàn toàn của mọi nội dung. Khi sử dụng W3Schools, bạn đồng ý đã đọc và chấp nhận các điều khoản sử dụng , chính sách cookie và quyền riêng tư của chúng tôi.

Bản quyền 1999-2024 của Refsnes Data. Đã đăng ký Bản quyền. Example.com.vn được cung cấp bởi W3.CSS .