当前位置: 代码迷 >> 综合 >> vue- filter、computed、watch、slot
  详细解决方案

vue- filter、computed、watch、slot

热度:18   发布时间:2024-01-26 16:04:40.0

全局的东西:
组件、过滤器 让大家直接用 全局不带s
component filter表示全局 components filters局部

  • filter 过滤器
  • watch单个监视
  • computed 群体监视
  • slot 留坑插槽

filter – 过滤器

定义:

function(原数据,参数1,参数2){return 结果}

调用

{{ '数据' | 过滤器名(参数1,,参数2) }}

demo

// 过滤器可以给数据显示进行添油加醋
// 示例:将input输入的值进行翻转显示,通过filters
var App = {template:`<div><input type='text' v-model='myText' /> 不带参数的{{myText|myreverse}}带参数的,参数可以无限增加{{myText|myreverse('en')}} </div>`,data:function(){return {myText:""}},//组件内的过滤器filters:{// filter return的值用于最终的展示reverse:function(dataStr){//参数1就是传递的原数据// 变数组 翻转 变字符串return dataStr.split("").reverse().join(""); // 显示的内容}}
}new Vue({el:"#app",components:{"app":App},template:`<app/>`
})// 全局过滤器 使用{{ "xxx" | myreverse("arg1") }}
Vue.filter("myreverse",function(data,arg1){return arg1 + ':' + data.split("").reverse().join("");;
})

watch --单个监视

使用

watch:{
// key属于data属性的属性名、两个参数表示改变前、改变后key:function(newV,oldV){console.log(newV,oldV)}
}

复杂类型监视(对象和数组)

// 深度监视: object||array
stus:{deep:true,//深度handler:function(newv,oldv){// 因为只赋了一个rose值,所以只监听一次console.log("监视复杂数据成功");console.log(newv)}
}

demo示例

// 示例:监视input输入的值,进行弹框var App = {template:`<div><input type='text' v-model='myText' />{{myText}}<button @click="stus[0].name='rose'">改变stus[0].name的属性值</button></div>`,data:function(){return {myText:"111",stus:[{name:"jack"}]}},watch:{//监视复杂类型,无法监视、原因是因为监视的是对象的地址,地址没改改的是同地址的属性// stus:function(){// console.log("监视失败,写法有问题");// },// 深度监视: object||arraystus:{deep:true,//深度handler:function(newv,oldv){// 因为只赋了一个rose值,所以只监听一次console.log("监视复杂数据成功");console.log(newv)}},// key属于data属性的属性名myText:function(newV,oldV){console.log(newV,oldV)if(newV == "i love you"){alert("我不爱你")}}}}

computed – 群体监视

demo:计算 (a+b)*c

// 示例:计算 (a+b)*c
var App = {template:`<div><input type='text' v-model='n1' />+<input type='text' v-model='n2' />*<input type='text' v-model='rate' />= {{result}}</div>`,data:function(){return {n1:0,n2:0,rate:0}},computed: {result:function (){//监视对象,写在函数内部// 凡是函数内部有this相关属性,改变都会触发当前函数// 包含原值不变,缓存不调函数的优化机制(原值复制粘贴不会触发监听)console.log('监听到了~')return ((this.n1-0) + (this.n2-0))*this.rate;}},
}new Vue({el:"#app",components:{"app":App},template:`<app/>`
})

slot – 留坑插槽

slot其实就是父组件传递的DOM结构
<slot></slot>是vue的内置组件

使用步骤:
1、定义子组件使用slot留坑,外部填入html

let MyLi = {template:`<li><slot></slot></li>`}

2、注册子组件,供父组件使用

Vue.component('my-li',MyLi);

3、父组件使用,填坑(<my-li>内部的东西都属于填坑用的,写什么结构,就显示什么结构)

let App = {template:`<div><ul><my-li>111111</my-li><my-li><button>我是按钮</button></my-li></ul></div>`
}

另:具名slot的定义、使用

var MySlot = {template: `<li>以下预留第一个坑<slot name='one'></slot> <hr>以下预留第二个坑<slot name='two'></slot> </li>`
}

注册子组件一样的
具名slot的使用

var App = {template: `<div><ul><my-Myslot><h1 slot='two'>我是1,对应第一个坑</h1><h1 slot='one'>我是2,对应第二个坑</h1></my-Myslot></ul></div>`
}
  相关解决方案