Vue
vue对象,绑定了json对象和组件,含有data、el、method、computed
new Vue({ el: '#div1', data: { clickNumber:0 }, mounted:function(){ //mounted 表示这个 Vue 对象加载成功了调用 }, methods:{ count: function(){ this.clickNumber++; } } computed:{ dollar:function() { return this.rmb / this.exchange; } } watch:{ dollar:function(val) { this.dollar = val; this.rmb = this.dollar * this.exchange; }, } filters:{ capitalize:function(value) { if (!value) return '' //如果为空,则返回空字符串 value = value.toString() return value.charAt(0).toUpperCase() + value.substring(1) } } components:{//组件 'product':{ template:'<div class="product" >MAXFEEL休闲男士手包真皮手拿包大容 量信封包手抓包夹包软韩版潮</div>' })
- computed 是有缓存的,只要rmb没有变化,dollar 会直接返回以前计算出来的值,而不会再次计算。 而methods每次都会调用。
- dollar的改变是这个特殊“事件”被触发的条件,而dollar对应的函数就相当于监听到事件发生后执行的方法
- watch擅长处理的场景:一个数据影响多个数据
computed擅长处理的场景:一个数据受多个数据影响
相比于watch/computed,methods不处理数据逻辑关系,只提供可调用的函数
增加监听
<button v-on:click="count">点击</button> <button @click="count">点击</button>
调用方法
{{dollar}}
调用data
{{clickNumber}}
调用computed
{{ dollar }}
从组件获得json对象
<input v-model="clickNumber" > <p>{{ clickNumber }}</p>
过滤器
{{ data|capitalize }} data作为capitalize过滤器的参数
全局过滤器
Vue.filter('capitalize', function (value) { if (!value) return '' value = value.toString() return value.charAt(0).toUpperCase() + value.slice(1) })
组件
<product></product>
全局组件,带参数name
Vue.component('product', { props:['name'],参数 template: '<div class="product" >{{name}}</div>'内容 })
组件绑定动态参数
组件外的值:<input v-model="outName" ><br> <product v-bind:name="outName"></product>组件的参数name绑定上"outName"
组件设置监听
Vue.component('product', { props:['name','sale'], template: '<div class="product" v-on:click="increaseSale">{{name}} 销量: {{sale}} </div>', methods:{ increaseSale:function(){ this.sale++ } } }) <product name="MAXFEEL休闲男士手包真皮手拿包大容量信封包手抓包夹包软韩版潮" sale="10" ></product>
组件的运用
循环 v-for="item in products"
product组件里的product参数被“item”绑定 v-bind:product="item"
<product v-for="item in products" v-bind:product="item"></product>
- Vue.component(组件名'product',配置templateObject)
- 配置templateObject:
props: [参数名]
template:html语句tempalateDiv
methods: {函数名: function () {
}} - html语句tempalateDiv=document.getElementById("tempalate").innerHTML
var tempalateDiv=document.getElementById("tempalate").innerHTML; var templateObject = { props: ['product'], template: tempalateDiv, methods: { increaseSales: function () { this.product.sale = parseInt(this.product.sale); this.product.sale += 1 this.$emit('increment') } } } Vue.component('product', templateObject)