当我坐在那架破旧古钢琴旁边的时候,我对 最幸福的国王也不羡慕。—— 海顿

vue学习--起步(三)

回顾

继续上一篇内容(扫尾工作),经过之前的介绍和简短的实践,我们已经能够渐渐的体会到vue的简洁和强大之处,你会发现利用它来开发web应用是一件相当愉悦的事。

组件系统

组件系统是vue中另一个非常重要的概念,它提供了一种抽象,允许我们像搭积木一般,利用各种独立的、可复用的小组件来构建一个大型应用。因为这个特性,我们几乎可以把任意一个web界面抽象成一个组件树。



定义组件

在vue中,组件本质上是一个预先定义好选项的vue实例,定义一个组件非常简便。

// 定义一个名为user的组件
Vue.component('user', {
  template: '<div class="userInfo"><p class="name">Neil</p><p class="job">freelancers</p><p class="hobby">folk art</p></div>'
})

引用组件

引用也是如此

<!-- 引用user组件 -->
<div class="page">
	<user></user>
</div>

嗯?这像不像自定义html标签,或者说是扩展了html标签,而且一点也不违和。事实上vue的作者正是参考了Web 组件规范(远未完成 提前体验),设计了这样一套组件语法,而且实现了 Slot API 与 is 特性(后期的文章会陆续介绍)。

灵活的改进

也许你会发现,上边的例子太过死板,是的我们完全可以让他变得更好。

// 定义一个名为user的组件
Vue.component('user', {
  props: ['item'],
  template: '<div class="userInfo"><p class="name">{{item.name}}</p><p class="job">{{item.job}}</p><p class="hobby">{{item.hobby}}</p></div>'
})

var app7 = new Vue({
  el: '#app-7',
  data: {
    item: {
      name: 'Neil',
      job: 'freelancers',
      hobby: 'folk art'
    }
  }
})
<div class="page" id="app-7">
	<user v-bind:item:"item"></user>
</div>
<!-- 引用user组件 -->

经过上边的改造,可以给user传递动态数据,user组件变得可复用。

运行结果:

更进一步

利用v-for指令,我们甚至输出一个用户列表。

// 定义一个名为user的组件
Vue.component('user', {
  props: ['item'],
  template: '<li class="userInfo"><p class="name">{{item.name}}</p><p class="job">{{item.job}}</p><p class="hobby">{{item.hobby}}</p></li>'
})

var app7 = new Vue({
  el: '#app-7',
  data: {
    list:[
      {
        name: 'Neil',
        job: 'freelancers',
        hobby: 'folk art'
      },
      {
        name: 'Judy',
        job: 'writer',
        hobby: 'travel'
      }
    ]
  }
})
<ol class="page" id="app-7">
    <user v-for="item in list" v-bind:item="item"></user>
</ol>
<!-- 引用user组件 -->

运行结果:

组件是可嵌套的、可交互的、它不单单只是自定义了标签而已,我们可以在组件之间进行数据传输,自定义事件系统,以及很好的和构建工具进行集成(如webpack)。可以说组件系统是构建vue应用的基石,灵活的组件系统和其它强大的特性,vue为我们提供了广阔的想象空间去编写一个web应用。


分享

分享本文章

文章来源
108810

佚名 2016-11-03

标签

vue

right left pencil2 css3 node design eye tags search rss back user pacman film