Vue学习记录(二)vue
组件api
1.组件介绍:浏览器
组件(Component)能够扩展HTML元素,封装可重用的代码。全部的Vue组件同时也都是Vue的实例,因此可接受相同的选项对象(除了一些根级特有的选项)并提供相同的生命周期钩子。函数
2.组件使用:学习
(1) 全局注册:code
1) 建立一个Vue实例:component
new Vue({ el: '#example' })
2) 注册一个全局组件:对象
Vue.component('my-component', { template: '<div>Hello World!</div>' })
3) 注册后的组件,即可做为自定义元素在一个实例的模板中使用(注意确保在初始化根实例以前注册组件):接口
<div id="example"> <my-component></my-component> </div>
以上三步效果即至关于:生命周期
<div id="example"> <div>Hello World!</div> </div>
(2) 局部注册: 经过某个Vue实例/组件的实例选项components注册仅在其做用域中可用的组件,这种封装也适用于其它可注册的Vue功能,好比指令:
var Child = { template: '<div>Hello World!</div>' } new Vue({ components: { 'my-component': Child } })
(3) DOM 模板解析注意事项:
Vue只有在浏览器解析、规范化模板以后才能获取其内容。像<ul>、<ol>、<table>、<select>这样的元素里容许包含的元素有必定的限制,而另外一些像<option>这样的元素只能出如今某些特定元素的内部,这样的状况下自定义组件会致使错误的渲染效果,通常的解决方法是使用is特性,好比:
<table> <tr is="my-row"></tr> </table>
注意,若是使用来自如下来源之一的字符串模板,则没有此限制:
1) <script type="text/x-template"> 2) JavaScript 内联模板字符串 3) .vue 组件 综上,应尽量使用字符串模板。
(4) data 必须是函数:
<div id="example"> <my-component></my-component> </div> var data = { count: 0 } Vue.component('my-component', { template: '<button v-on:click="count+= 1">{{ count}}</button>', data: function () { return data } })
(5) 组件组合:
经过一个良好定义的接口来尽量将父子组件解耦是很重要的,这保证了每一个组件的代码能够在相对隔离的环境中书写和理解,从而提升了其可维护性和复用性。在Vue中,父子组件的关系能够总结为prop向下传递,事件向上传递。父组件经过prop给子组件下发数据,子组件经过事件给父组件发送消息。
3.过滤器:
Vue.js容许自定义过滤器,用于一些常见的文本格式化。过滤器能够用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持)。过滤器应该被添加在JavaScript 表达式的尾部,由“管道”符号指示,例如:
<!-- 在双花括号中 --> {{ message | capitalize }} <!-- 在 `v-bind` 中 --> <div v-bind:id="divId | capitalize "></div> <!-- 在一个组件的选项中定义本地的过滤器 --> filters: { capitalize: function (value) { if (!value) return '' value = value.toString() return value.charAt(0).toUpperCase() + value.slice(1) } }