例如,注册一个Hello组件:javascript
var Hello = Vue.extend({ //返回预设选项的Vue构造器(子类) data: function() { return { msg: 'Hello,Vue.js' } }, template: '<h1>{{msg}}</h1>' });
这样,就建立了一个h1
标签,标签内容为Hello,Vue.js的Hello组件,咱们可使用全局注册来使用这个组建:css
<body> <Hello></Hello> </body> <script> //全局注册 Vue.component('Hello',Hello); new Vue({ el: 'body', components: { // 'Hello': Hello, //局部注册 'Temp': Temp } }); </script>
固然,咱们也可使用局部注册。html
template实例模版,用户替换或插入挂载元素,元素可使用#
选择子,使用匹配元素的innerHTML
做为模板前端
<body> <Hello></Hello> <Temp></Temp> <template id="template-use"> <p>{{msg}}</p> <p>Demos 代码演示、代码片断 - 读你 | 这世间惟有梦想和好姑娘不可辜负!</p> </template> </body> <script> var Temp = Vue.extend({ data: function() { return { msg: '组件的注册与使用' } }, template: '#template-use' }); new Vue({ el: 'body', components: { 'Hello': Hello, //局部注册 'Temp': Temp } }); </script>
使用 Vue 扩展构造 Vue 实例时,实例选项中的 methods 属性会覆盖扩展选项中的 methods 属性?vue
Vue 扩展是一个提供了部分可复用的数据、方法……选项的 Vue 构造器,能够直接使用 new MyVue(options) 这样的方式来构造 Vue 实例;只要愿意,能够在一个页面上使用 Vue 构造器或者 Vue 扩展构造器建立任意个 Vue 实例;使用 Vue 扩展构造 Vue 实例时,选项级别的属性并非直接覆盖.java
如 Vue 扩展选项里包括 methods 属性,调用该扩展构造器时也传入了 methods,则会将两个 methods 中的内容合并成一个新对象,仅当存在键名冲突时,实例选项中的方法覆盖扩展选项中的同名方法.ajax
data 属性的状况相似,但更复杂,键名冲突时,当 data 属性中的数据是数值时,使用实例选项中的数据覆盖扩展选项中的数据,当 data 属性中的数据是对象时,将两个对象按相同规则继续合并,此外,同名钩子会组成数组,在生命周期中事件触发时均会被调用.数组
使用 Vue.extend 建立 Vue 扩展时,扩展选项中的 data 和 el 必须是返回相关数据的函数,即便使用指向同一个数据对象的变量做为函数的返回值,经过 Vue 扩展建立的 Vue 实例的数据也是不一样的。函数
注意:
当自定义标签所对应的模板中可能包含多个顶级元素时,因为指令优先级的关系,不能使用 v-show 指令,而且在任何自定义标签后的元素中,v-else 均无效;因为 v-if 的初始化处理方式不一样(根据绑定数据决定是否建立 DOM 元素,而不是设置 display 属性),在自定义标签中使用 v-if 指令是能够的,而且容许在后续标签中使用 v-else。ui
<body> <child title="Vue.js权威指南" author="滴滴前端" price="89"></child> </body> <script src="http://cdnjs.cloudflare.com/ajax/libs/vue/1.0.26/vue.min.js"></script> <script type="text/javascript"> //注册组建 var child = Vue.component('child',{ props: [ 'title','author','price' ], template: `<span :title="title">{{title}}</span> <span :author="author">{{author}}</span> <span :price="price">{{price}}</span>` }); //使用组建 new Vue({ el: 'body', components: { child } }); </script>
这里使用了另外一种建立组建的方式,属于Vue语法糖,背后会自动使用Vue.extend()
.
type:类型
required:是否必须
towWay:是否双向
default:默认值
validator:自定义校验函数
coerce:转换函数
type 为 String、Number、Boolean、Function、Object、Array等原生构造器或自定义构造器
仅有 type 时可不适用对象语法
可设置为构造器数组
若是设置了转换函数,先转换再判断 type
<template> <span></span> </template> <script> export default{ props: ['componentName'] } </script> <style> img.log{ width:16px;height:16px; } </style>
template块
默认语言html,每一个文件容许最多一个template块
script块
默认语言js,每一个文件容许最多一个script块
style块
默认语言CSS,支持多个style块
Vue.js 的单文件组件中不必定要有 template 语言块,再者,即便确实须要 template 属性,script 语言块中输出的组件选项中也能够包含字符串形式的 template属性。为了更好地组织样式,一个单文件组件中容许有多个 style 语言块。template 语言块的默认语言是 html,还能够设置为其余预处理的模板语言如 jade。script 语言块的默认语言是 js,也容许设置使用其余语言如 CoffeeScript、TypeScript 等。
<template src="./template.html"> </template> <script src="./script.js"> </script> <style src="./style.css"> </style>
支持src引用,遵循CommonJS路径规范。
++++++++++本人出售本人出售《Vue.js权威指南》,二手价20元!++++++++++