选项/数据

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)的更多相关文章

  1. Vue实例对象的数据选项

    前面的话 一般地,当模板内容较简单时,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项 data ...

  2. Vue实例对象的数据选项(火柴)

    前言 一般地,当模板内容比较简单的时候,使用data选项配合表达式即可.涉及到复杂逻辑时,则需要用到methods.computed.watch等方法.本文将详细介绍Vue实例对象的数据选项. dat ...

  3. 配置 influxDB 鉴权及 HTTP API 写数据的方法

    本文简要描述如何为 InfluxDB 开启鉴权和配置用户管理权限(安装后默认不需要登录),以及开启鉴权后如何使用 HTTP API 写数据. 创建 InfluxDB 管理员账号创建 admin 帐号密 ...

  4. 使用Vue.js和Axios从第三方API获取数据 — SitePoint

    更多的往往不是,建立你的JavaScript应用程序时,你会想把数据从远程源或消耗一个[ API ](https:/ /恩.维基百科.org /维基/ application_programming_ ...

  5. D3中数据与DOM element绑定之data() enter() exit()浅析

    几个非常有用的links: [1] three little circles. http://bost.ocks.org/mike/circles/ [2] How selection works.  ...

  6. 传递多个参数并获取Web API的数据

    近段时间学习Web Api觉得非常有意思.默认的路由情况之下,获取数据时,它不必指定Action操作名. 还有另外感想,就是自从学习asp.net MVC之后,加上jQuery,让Insus.NET已 ...

  7. Html网页使用jQuery传递参数并获取Web API的数据

    昨天Insus.NET有开始学习Web API,<ASP.NET MVC的Web Api的实练>http://www.cnblogs.com/insus/p/4334316.html .其 ...

  8. Hadoop权威指南:通过FileSystem API读取数据

    Hadoop权威指南:通过FileSystem API读取数据 [TOC] 在Hadoop中,FileSystem是一个通用的文件系统API 获取FileSystem实例的几个静态方法 public ...

  9. Python获得百度统计API的数据并发送邮件

    Python获得百度统计API的数据并发送邮件 小工具  本来这么晚是不准备写博客的,当是想到了那个狗子绝对会在开学的时候跟我逼逼这个事情,所以,还是老老实实地写一下吧.   Baidu统计API的使 ...

随机推荐

  1. hdu ACM Steps Section 1 花式A+B 输入输出格式

    acm与oi很大的一个不同就是在输入格式上.oi往往是单组数据,而acm往往是多组数据,而且题目对数据格式往往各有要求,这8道a+b(吐槽..)涉及到了大量的常用的输入输出格式.https://wen ...

  2. [HEOI2016/TJOI2016]序列 CDQ分治

    ---题面--- 题解: 首先我们观察一下,如果一个点对(j, i), 要符合题中要求要满足哪些条件? 首先我们设 j < i 那么有: j < i max[j] < v[i] v[ ...

  3. 【BZOJ5329】【SDOI2018】战略游戏(圆方树,虚树)

    [BZOJ5329][SDOI2018]战略游戏(圆方树,虚树) 题面 BZOJ 洛谷 Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战 ...

  4. AOJ.562 寻找罗恩和赫敏

    寻找罗恩和赫敏 考察点 水题 Time Mem Len Lang 0 492KB 0.42K G++ 题意分析 计算1/C(n,2)的值 代码总览 /* Title:AOJ.562 Author:pe ...

  5. HDOJ.1113 Word Amalgamation(map)

    Word Amalgamation 点我挑战题目 点我一起学习STL-MAP 题意分析 给出字典.之后给出一系列======乱序======单词,要求你查字典,如过这个乱序单词对用有多个有序单词可以输 ...

  6. 征战jQuery

    一:jQuery的用途 1>.访问 和 操作 DOM元素 2>.控制 页面样式 3>.对页面事件的处理 4>.方便的使用jQuery插件 5>.与Ajax技术的完美结合 ...

  7. VS 2013 with update安装失败(kb2829760)解决方案

    update过程中遇到kb2829760补丁无法更新而导致vs安装失败的解决方法: 1.安装KB2829760: 2.安装KB2829760中文语言包: 3.安装VS2013 with update. ...

  8. shell中的$* $@

    shell中$*与$@的区别 关于$* 和 $@的 一点 认识 同是菜鸟一起学习 $* 所有的位置参数,被作为一个单词. 注意:"$*"必须被""引用. $@ ...

  9. ASP.NET创建三层架构图解详细教程

    1.新建项目 2.创建Visual Studio解决方案 3.再创建项目 4.选择类库类型 5.依次创建bll(业务逻辑层),dal(数据访问层)和model(模型层也可以叫实体层) 6.添加一个网站 ...

  10. eclipse常见问题解决方案

    1.maven项目,启动报错ClassNotFoundException,原因是tomcat下\WEB-INF\classes目录中,java文件没有编译成class文件.解决方法: 在\WEB-IN ...