组件
| <my-counter></my-counter> |
| |
| const app = Vue.createApp({ |
| data() { |
| return {} |
| } |
| }) |
| |
| |
| app.component('my-counter', { |
| data() { |
| return {} |
| }, |
| template: ``, |
| methods: { |
| } |
| }).mount('dom节点') |
| |
| <blog-post title='标题一'></blog-post> |
| |
| app.component("blog-post",{ |
| props: ['title'], |
| template: `<h3>{{title}}</h3>` |
| }) |
| |
| |
| <blog-post |
| v-for="post in posts" |
| :key="post.id" |
| :title="post.title" |
| ></blog-post> |
| |
- 监听子组件事件:单项数据流,父组件可向子组件传递的数据,反之则不行,父组件的数据改变时,子组件也会随之改变
| app.component('blog-post1', { |
| props: ['title'], |
| template: ` |
| <h3>{{title}}</h3> |
| <button @click='$emit("btn", title)'>按钮</button> |
| ` , |
| emits: ['btn'] |
| }) |
| |
| <blog-post1 @btn='btn($event)'></blog-post> |
| <blog-post1 @btn='btn'></blog-post> |
| |
| const app = Vue.createApp({ |
| data() { |
| return {} |
| }, |
| methods: { |
| btn(e) { |
| |
| } |
| } |
| }) |
| |
插槽
| const app = Vue.createApp({ |
| |
| }) |
| |
| app.component('alert-box', { |
| template: ` |
| <div>Error:<slot></slot></div> |
| ` |
| }).mount('#app') |
| |
| |
| <alert-box><span>服务器异常</span></alert-box> |
| |
script模板
| |
| <script type='text/x-template' id='demo'> |
| |
| </script> |
| |
| const app = Vue.createApp({}) |
| app.component('alert-box', { |
| template: `#demo` |
| }).mount('#app') |
| |
| <alert-box></alert-box> |
| |
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术