Vue. js 六、组件化开发(一)

组件化思想

它提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。
有了组件化的思想,我们在之后的开发中就要充分的利用它。
尽可能的将页面拆分成一个个小的、可复用的组件。
这样让我们的代码更加方便组织和管理,并且扩展性也更强
  • 组件的使用分成三个步骤:
    1.创建组件构造器
    2.注册组件
    3.使用组件
<div id='app'>  
    <!-- 3.使用组件 -->
    <my-cpn></my-cpn>
    <my-cpn></my-cpn>
</div>
<!-- <my-cpn></my-cpn>  //如果在实例外面使用组件的话是没有用的 -->

1.Vue.extend():

  • 调用Vue.extend()创建的是一个组件构造器

2.Vue.component():

  • 调用Vue.component()是将刚才的组件构造器注册为一个组件,并且给它起一个组件的标签名称。
  • 所以需要传递两个参数:1、注册组件的标签名 2、组件构造器

3.组件必须挂载在某个Vue实例下,否则它不会生效。

<script>
// 1.创建组件
let cpn = Vue.extend({
    template:`
    <div>
    	<h2>我是组件</h2>
    	<p>1.创建组件</p>
    	<p>2.注册组件</p>
    	<p>3.使用组件</p>
    </div>
    `
})
// 2.注册组件
Vue.component('my-cpn',cpn)

let app = new Vue({
    el:'#app'
});
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js是一款流行的JavaScript框架,它提供了非常方便的组件开发方式。要开发一个标签页组件,你可以先创建一个Tab组件,然后在Tab组件中使用TabItem子组件。 以下是一个简单的Vue.js标签页组件代码示例: ``` <template> <div class="tab"> <div class="tab-nav"> <div v-for="(item, index) in tabs" :key="index" class="tab-nav-item" @click="selectTab(index)"> {{ item.title }} </div> </div> <div class="tab-content"> <slot /> </div> </div> </template> <script> export default { name: "Tab", props: { activeIndex: { type: Number, default: 0 } }, data() { return { tabs: [] }; }, mounted() { this.tabs = this.$children.map((component) => { return { title: component.$props.title }; }); }, methods: { selectTab(index) { this.$emit("update:activeIndex", index); } } }; </script> ``` 这个Tab组件有一个`tabs`数组,用于存储每个标签页的标题。组件在mounted生命周期钩子中遍历所有的子组件,获取它们的标题并添加到`tabs`数组中。`selectTab`方法用于选中标签页,并通过`update:activeIndex`事件向父组件发送选中的标签页索引。 接下来,你可以编写一个TabItem子组件来作为标签页内容的容器,代码示例如下: ``` <template> <div v-show="isActive" class="tab-content-item"> <slot /> </div> </template> <script> export default { name: "TabItem", props: { title: { type: String, required: true }, activeIndex: { type: Number, default: 0 } }, computed: { isActive() { return this.activeIndex === this.index; }, index() { return this.$parent.$children.indexOf(this); } } }; </script> ``` 这个TabItem子组件有一个`title`属性用于显示标签页标题,还有一个`isActive`计算属性用于判断当前标签页是否处于激活状态。在computed属性中,`index`计算属性获取当前子组件在父组件中的索引。 最后,你可以在父组件中使用Tab和TabItem组件来实现标签页功能: ``` <template> <div> <Tab :active-index.sync="activeIndex"> <TabItem title="标签1">标签1内容</TabItem> <TabItem title="标签2">标签2内容</TabItem> <TabItem title="标签3">标签3内容</TabItem> </Tab> </div> </template> <script> import Tab from "./Tab.vue"; import TabItem from "./TabItem.vue"; export default { name: "App", components: { Tab, TabItem }, data() { return { activeIndex: 0 }; } }; </script> ``` 这个父组件中包含一个Tab和三个TabItem子组件,使用`:active-index.sync`属性将父组件中的`activeIndex`属性同步到子组件中,从而实现标签页切换效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值