Vue:简单了解组件

简介: Vue:简单了解组件

Vue组件基础–简单了解vue组件

Vue组件是什么?

组件就像是提前做好的模具,使用时拿出来就行,可以重复调用,它跟普通的Vue有一样的属性:

1、data (数据存放)

2、computed(计算属性)

3、watch(监听属性)

4、methods(方法存放)

熟悉的人应该看出来了,组件并没有el属性,组件没有根节点相关的属性。

组件的data必须是一个函数,这样多个组件才不会相互影响。

data: function () {
  return {
    count: 0
  }
}

组件可以通过Prop 对子组件进行传值,可以使用v-bind动态传递prop的数据

<div id="app">
  <my-p v-for="item in list" 
  :title="item.title"><!-- 使用v-bind(:)动态传递prop -->
  </my-p>
</div>
Vue.component('my-p',{
  props:['title'],  //props向子组件传递数据
  template:'<p>{{title}}</p>'
})
new Vue({
  el:"#app",
  data:{
    list:[
      { id: 1, title: 'My journey with Vue' },
      { id: 2, title: 'Blogging with Vue' },
      { id: 3, title: 'Why Vue is so fun' }
    ]
  }
})

组件的监听子组件事件

主要通过子组件的 $emit 方法并传入事件名触发事件

emit可以使用第二个参数向上抛值,监听的父组件通过event获取

<div id="app">
  <div :style="{fontSize:size + 'px'}"> <!-- 字体大小通过size动态获取 -->
    <my-p v-for="item in list"
    :title="item.title" 
    @addsize="size += $event"> <!-- $event获取子组件通过$emit抛的值 -->
    </my-p>
  </div>
</div>
Vue.component('my-p',{
  props:['title'],  //props向子组件传递数据
  template:`<div>
        <p>{{title}}</p>
        <button @click="$emit('addsize',10)">点击放大</button>
      </div>`
      //子组件通过 $emit  方法并传入事件名触发事件
      //$emit可以使用第二个参数向上抛值,监听的父组件通过$event获取
})
new Vue({
  el:"#app",
  data:{
    list:[
      { id: 1, title: '这是第一个' },
      { id: 2, title: '这是第二个' },
      { id: 3, title: '这是第三个' }
    ],
    size:14
  }
})

组件中v-model的实现

当input事件触发时,通过$emit对数据进行抛出

<div id="app">
  <!-- 组件中v-model的使用 -->
  <my-input v-model="myText"></my-input>
  <p>{{myText}}</p>
</div>
Vue.component('my-input', {
 props: ['value'],//通过props动态数据传递
 template: `
    <input
      :value="value"
      @input="$emit('input', $event.target.value)"
    >
  `
  // input事件触发时,通过$emit对数据进行抛出
})
new Vue({
  el:"#app",
  data:{
    myText:''
  }
})

动态组件

通过:is实现tab切换效果

<div id="app">
  <button
  v-for="item in list"
  @click="currList = item">{{item}}</button>
   <!-- 通过点击的item给currList赋值 -->
  <component :is="curr"></component> 
  <!-- 通过:is="curr"的curr值进行组件的切换 -->
</div>
Vue.component("my-div", {
  template: "<div>Home component</div>"
});
Vue.component("my-div2", {
  template: "<div>Posts component</div>"
});
new Vue({
  el:"#app",
  data:{
    list:['div','div2'],
    currList:'div'
  },
  computed:{
    curr: function() {
      return "my-" + this.currList;  
      //修改组件的curr值改变组件的显示
    }
  }
})
目录
相关文章
|
5天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
5天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
5天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
5天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
4天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
6天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
4天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
6天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
JavaScript 测试技术 容器
Vue2+VueRouter2+webpack 构建项目
1). 安装Node环境和npm包管理工具 检测版本 node -v npm -v 图1.png 2). 安装vue-cli(vue脚手架) npm install -g vue-cli --registry=https://registry.
1050 0
|
11天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发