API(选项/数据 选项/dom)
选项/数据
data
类型: Object | Function
限制: 组件的定义只接受function
var data = { a: 1 } // 直接创建一个实例
var vm = new Vue({
data: data
})
vm.a // => 1
vm.$data === data // => true // Vue.extend() 中 data 必须是函数
var Component = Vue.extend({
data: function () {
return { a: 1 }
}
})
props
类型:Array | Object
详细:
props可以是数组或对象,用于接收来自父组件的数据。props可以是简单的数组,或者使用对象作为替代,对象允许配置高级选项,如类型检测,自定义校验和设置默认值
// 简单语法
Vue.component('props-demo-simple', {
props: ['size', 'myMessage']
}) // 对象语法,提供校验
Vue.component('props-demo-advanced', {
props: {
// 检测类型
height: Number,
// 检测类型 + 其他验证
age: {
type: Number,
default: 0,
required: true,
validator: function (value) {
return value >= 0
}
}
}
})
propsData
类型:{[key:string]:any}
限制:只用于new创建的实例中
详细:创建实例时传递props。主要作用是方便测试
var Comp = Vue.extend({
props: ['msg'],
template: '<div>{{ msg }}</div>'
}) var vm = new Comp({
propsData: {
msg: 'hello'
}
})
propsData Option 全局扩展的数据传递
<h1>PropsData Option Demo</h1>
<hr>
<header></header>
<script src="vue.js"></script>
<script type="text/javascript">
var header_a = Vue.extend({
template:`<p>{{message}}</p>`,
data:function(){
return {
message: 'Hello ,I am Header'
}
}
});
new header_a().$mount('header');
</script>
我们用propsData三步解决传值
1,在全局扩展里加入props进行接收。propsData:{a:1}
2、传值时用propsData进行传递。props:['a']
3、用插值的形式写人模板。{{a}}
var header_a = Vue.extend({
template:`<p>{{message}}--{{a}}</p>`,
data:function(){
return {
message: 'Hello ,I am Header'
}
},
props: ['a']
});
new header_a({propsData:{a:1}}).$mount('header');
computed
类型:{[key:string]:Function | {get: Function,set:function}}
详细:计算属性将被混入到vue实例中。所有getter和setter的this上下文自动地绑定为vue实例
计算属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算。注意,如果某个依赖(比如非响应式属性)在改实例范畴之外,则计算属性是不会被更新的
var vm = new Vue({
data: { a: 1 },
computed: {
// 仅读取
aDouble: function () {
return this.a * 2
},
// 读取和设置
aPlus: {
get: function () {
return this.a + 1
},
set: function (v) {
this.a = v - 1
}
}
}
})
vm.aPlus // => 2
vm.aPlus = 3
vm.a // => 2
vm.aDouble // => 4
Computed Option
<h1>Computed Option 计算选项</h1>
<hr>
<div id="app">
{{newPrice}}
</div>
<script src="vue.js"></script>
<script type="text/javascript">
var app = new Vue({
el:'#app',
data:{
price: 100
},
computed:{
newPrice:function(){
return this.price='¥'+this.price+'元'
}
}
})
</script>
methods
类型:{[key:string]:Function}
详细:
methods将混入到vue实例中,可以直接通过VM实例访问这些方法,或者在指令表达式中使用。方法中的this自动绑定为Vue实例
var vm = new Vue({
data: { a: 1 },
methods: {
plus: function () {
this.a++
}
}
})
vm.plus()
vm.a // 2
Methods Option
<h1>Methods Option 方法选项</h1>
<hr>
<div id="app">
{{a}}
<p><button @click="add">add</button></p>
</div>
<script src="vue.js"></script>
<script type="text/javascript">
var app = new Vue({
el:'#app',
data:{
a:1
},
methods:{
add:function(){
this.a++
}
}
})
</script>
watch
类型:{[key:string]:string | Function | Object | Array }
详细:
一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue实例将会在实例化时调用$watch(),遍历watch对象的每一个属性
var vm = new Vue({
data: {
a: 1,
b: 2,
c: 3,
d: 4,
e: {
f: {
g: 5
}
}
},
watch: {
a: function (val, oldVal) {
console.log('new: %s, old: %s', val, oldVal)
},
// 方法名
b: 'someMethod',
// 深度 watcher
c: {
handler: function (val, oldVal) { /* ... */ },
deep: true
},
// 该回调将会在侦听开始之后被立即调用
d: {
handler: function (val, oldVal) { /* ... */ },
immediate: true
},
e: [
function handle1 (val, oldVal) { /* ... */ },
function handle2 (val, oldVal) { /* ... */ }
],
// watch vm.e.f's value: {g: 5}
'e.f': function (val, oldVal) { /* ... */ }
}
})
vm.a = 2 // => new: 2, old: 1
watch
<h1>Watch 选项 监控数据</h1>
<hr>
<div id="app">
<p>今日温度:{{temperature}}°C</p>
<p>穿衣建议:{{this.suggestion}}</p>
<p>
<button @click="add">添加温度</button>
<button @click="reduce">减少温度</button>
</p>
</div>
<script src="vue.js"></script>
<script type="text/javascript">
var suggestion = ['T恤短袖','夹克长裙','棉衣羽绒服']
var app = new Vue({
el:'#app',
data:{
temperature: 14,
suggestion: '夹克长裙'
},
methods:{
add:function(){
this.temperature+=5;
},
reduce:function(){
this.temperature-=5;
}
},
watch:{
temperature:function(newVal,oldVal){
if(newVal>=26){
this.suggestion=suggestion[0];
}else if(newVal<26 && newVal >=0)
{
this.suggestion=suggestion[1];
}else{
this.suggestion=suggestion[2];
}
}
}
})
</script>
用实例属性写watch监控
app.$watch('xxx',function(){})
选项/DOM
el
- 类型:string | HTMLElement
- 限制:只在new创建的实例中遵守
- 详细
- 提供一个页面上已存在的DOM元素作为Vue实例的挂载目标。可以是css选择器,也可以是一个HTMLElement实例
- 在实例挂载之后,元素可以用vm.$el访问
- 如果这个选项在实例化时有作用,实例将立即进入编译过程,否则,需要显示调用vm.$mount()手动开启编译
template
- 类型:string
- 详细
- 一个字符串模板作为 Vue 实例的标识使用。模板将会 替换 挂载的元素。挂载元素的内容都将被忽略,除非模板的内容有分发插槽。
- 如果值以 # 开始,则它将被用作选择符,并使用匹配元素的 innerHTML 作为模板。常用的技巧是用
<script type="x-template">包含模板。
render
- 类型:(createElement:() => VNode) => Vnode
- 详细
- 字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力。该渲染函数接收一个 createElement 方法作为第一个参数用来创建 VNode。
- 如果组件是一个函数组件,渲染函数还会接收一个额外的 context 参数,为没有实例的函数组件提供上下文信息。
选项/组合
mixins
mixins一般有两种用途
1、在你已经写好了构造器后,需要增加方法或者临时的活动时使用的方法,这时用混入会减少源代码的污染。
2、很多地方都会用到的公用方法,用混入的方法可以减少代码量,实现代码重用。
<h1>Mixins Option Demo</h1>
<hr>
<div id="app">
<p>num:{{num}}</p>
<p><button @click="add">增加数量</button></p>
</div>
<script src="vue.js"></script>
<script type="text/javascript">
var addLog = {
updated:function(){
console.log('数据发生变化,变化成'+this.num+".")
}
}
var app = new Vue({
el: '#app',
data:{
num: 1
},
methods:{
add:function(){
this.num++;
}
},
updated:function(){
console.log('构造器里的updated方法。')
},
mixins:[addLog]//混入
}) // Vue.mixin({ //全局混入的执行顺序要前于混入和构造器里的方法。
// updated:function(){
// console.log('我是全局被混入的')
// }
// })
</script>
extends 扩展选项
<h1>Extends Option Demo</h1>
<div id="app">
{{message}}
<p><button @click="add">增加数量</button></p>
</div>
<script src="vue.js"></script>
<script type="text/javascript">
var bbb = {
created:function(){
console.log('我是被扩展出来的')
},
methods:{
add:function() {
console.log('我是被扩展出来的方法!')
}
}
}
var app = new Vue({
el: '#app',
data:{
message: 'hello Vue!'
},
methods:{
add:function(){
console.log('我是原生方法')
}
},
updated:function(){
console.log('构造器里的updated方法。')
},
extends:bbb
})
</script>
选项/其他
delimiters 选项
delimiters的作用是改变我们插值的符号。Vue默认的插值是双大括号{{}}。但有时我们会有需求更改这个插值的形式
delimiters:['${','}']
现在插值形式就变成${}。
API(选项/数据 选项/dom)的更多相关文章
- Vue实例对象的数据选项
前面的话 一般地,当模板内容较简单时,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项 data ...
- Vue实例对象的数据选项(火柴)
前言 一般地,当模板内容比较简单的时候,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项. dat ...
- 配置 influxDB 鉴权及 HTTP API 写数据的方法
本文简要描述如何为 InfluxDB 开启鉴权和配置用户管理权限(安装后默认不需要登录),以及开启鉴权后如何使用 HTTP API 写数据. 创建 InfluxDB 管理员账号创建 admin 帐号密 ...
- 使用Vue.js和Axios从第三方API获取数据 — SitePoint
更多的往往不是,建立你的JavaScript应用程序时,你会想把数据从远程源或消耗一个[ API ](https:/ /恩.维基百科.org /维基/ application_programming_ ...
- D3中数据与DOM element绑定之data() enter() exit()浅析
几个非常有用的links: [1] three little circles. http://bost.ocks.org/mike/circles/ [2] How selection works. ...
- 传递多个参数并获取Web API的数据
近段时间学习Web Api觉得非常有意思.默认的路由情况之下,获取数据时,它不必指定Action操作名. 还有另外感想,就是自从学习asp.net MVC之后,加上jQuery,让Insus.NET已 ...
- Html网页使用jQuery传递参数并获取Web API的数据
昨天Insus.NET有开始学习Web API,<ASP.NET MVC的Web Api的实练>http://www.cnblogs.com/insus/p/4334316.html .其 ...
- Hadoop权威指南:通过FileSystem API读取数据
Hadoop权威指南:通过FileSystem API读取数据 [TOC] 在Hadoop中,FileSystem是一个通用的文件系统API 获取FileSystem实例的几个静态方法 public ...
- Python获得百度统计API的数据并发送邮件
Python获得百度统计API的数据并发送邮件 小工具 本来这么晚是不准备写博客的,当是想到了那个狗子绝对会在开学的时候跟我逼逼这个事情,所以,还是老老实实地写一下吧. Baidu统计API的使 ...
随机推荐
- 【题解】SCOI2008配对
贪心+dp~观察数据,发现一个规律:将数字排序之后,最优匹配只可能产生在该数字和与它距离不超过二的数字之间. 所以可以用dp[i]代表前i个数(排序)匹配的最小差值,之后暴力选出该新数应该如何匹配. ...
- [HNOI2012][BZOJ2732] 射箭 [二分+半平面交]
题面 BZOJ题面 思路 半平面交代码讲解戳这里,用的就是这道题 我们射箭的函数形如$y=Ax^2+Bx$ 考虑每一个靶子$(x_0,y_1,y_2)$,实际上是关于$A,B$的不等式限制条件 我们只 ...
- XXE漏洞攻击与防御整理
一.漏洞原理 1.DTD 文档类型定义(DTD)可定义合法的XML文档构建模块.它使用一系列合法的元素来定义文档的结构.DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用. 内部的 DOC ...
- 我的ACM参赛故事
从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...
- bzoj4552: [Tjoi2016&Heoi2016]排序(二分+线段树)
又是久违的1A哇... 好喵喵的题!二分a[p],把大于mid的数改为1,小于等于mid的数改为0,变成01串后就可以用线段树进行那一连串排序了,排序后如果p的位置上的数为0,说明答案比mid小,如果 ...
- [LOJ 6000]搭配飞行员
link 其实就是一道二分图匹配板子,我们建立$S$,$T$为源点与汇点,然后分别将$S$连向所有正驾驶员,边权为$1$,然后将副驾驶员与$T$相连,边权为$1$,将数据中给出的$(a,b)$,将$a ...
- pexpect正确的打开方式
今天在写一个Python脚本时遇到一个问题——同样的代码,在Python终端执行没问题,在脚本里执行却不行,就是下面这段代码: import pexpect password = 'test2014' ...
- @RequestParam 注解的使用
@RequestParam 注解的使用 前言 在SpringMvc后台进行获取数据,一般是两种. 1.request.getParameter(“参数名”) 2.用@RequestParam注解获取 ...
- [net tools]nethogs
nethogs 按照从大到小排列占用网络流量的进程 还可以用jnettop察看,总的流量
- Java并发之同步原语
volatile: 定义:Java编程语言允许线程访问共享变量,为了确保共享变量内被准确和一致性地更新,线程应该确保通过排它锁单独获得这个变量.根据volatile的定义,volatile有锁的语义. ...