filter引入 vue_vue: Filter与Mixins

filter根据规则进行筛选渲染(将来大部分将被计算属性代替,使用场景少)

需求1: 把data中的msg值渲染为大写

如何使用filter:

局部filters

  1. 在export default中写上filters(局部)字段,再下面定义方法toUpperCase
  2. filter的使用场景只有双大括号和v-bind指令,在双大括号中加 | 后面写fiters中定义的方法即可
<template>
  <div id="app">
   <h1>filters & mixins</h1>
   <p>{{ msg | toUpperCase }}</p>
  </div>
</template>
<script>
export default {
 data(){
 return{
      msg: "hello",
    }
  },
  filters: {
 toUpperCase(value) {
 return value.toUpperCase();
 // 大写方法  fiters两个使用场景 {{ 数据绑定 }} v-bind指令
    }
  }
}
</script>

小结: fiters可以不改变原来的数据格式,可以简单的修改格式,比如大小写、时间格式、等,它修改过的东西不会保存。Filter的this是undefined

d517563c0b461a06ffbdb93a034c90c9.png

全局filter

在入口文件main.js中

定义全局filers

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

Vue.filter("toLowerCase", function(value) {
 return value.toLowerCase();
 // 转小写
})
new Vue({
 render: h => h(App),
}).$mount('#app')

App.vue文件

<p>{{ msg | toUpperCase | toLowerCase }}</p>

12b8be9d91e456a00562d1f3db36bbc8.png

大写转小写

Mixins

我们复制一份App.vue的代码到新建的list.vue中,再用组件的方式引入回来,可以得到两份一样的代码(删除了hello,用来区分)。

App.vue文件

<template>
  <div id="app">
   <h1>filters & mixins</h1>
   <p>{{ msg | toUpperCase | toLowerCase }}</p>
   <hr>
   <input type="text" v-model="inputText">
   <ul>
     <li v-for='fruit in fruitArr' :key="fruit">{{ fruit }}</li>
   </ul>
   <hr>
   <list></list>
  </div>
</template>

<script>
import list from "./components/list"
export default {
  components: {
    list: list
  },
 data(){
 return{
      msg: "hello",
      inputText: "",
      fruitArr: ["Apple", "Banana", "Mango"]
    }
  },
  filters: {
 toUpperCase(value) {
 return value.toUpperCase();
 // 大写方法  fiters两个使用场景 {{ 数据绑定 }} v-bind指令
    }
  }
}
</script>

<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>

list.vue文件

<template>
  <div id="app">
   <h1>filters & mixins</h1>
   <hr>
   <input type="text" v-model="inputText">
   <ul>
     <li v-for='fruit in fruitArr' :key="fruit">{{ fruit }}</li>
   </ul>
  </div>
</template>

<script>
export default {
 data(){
 return{
      inputText: "",
      fruitArr: ["Apple", "Banana", "Mango"]
    }
  },
}
</script>

<style>
</style>

340f01d564f2660cfa69f17967f90f3b.png

现在我们要使用组件化思想,把重复的代码提取成一个功能

新建一个listMixin.js的文件

把重复的代码粘贴到里面

listMixin.js文件代码

export default {
 data() {
 return {
            inputText: "",
            fruitArr: ["Apple", "Banana", "Mango"]
        }
    },
}

然后在App.vue中引入组件,在export default中使用mixins字段,值为数组,把引入文件的名放在里面,然后把重复的代码删除,还是可以用的。在list.vue中也这样操作即可。

App.vue中的script代码

import list from "./components/list"
import listMixin from "./components/listMixin"  // 引入mixin代码
export default {
  mixins: [listMixin],                          // 使用数组方式使用
  components: {
    list: list
  },
 data(){
 return{
      msg: "hello",
 // inputText: "",                             // 把重复代码去除
 // fruitArr: ["Apple", "Banana", "Mango"]     // 把重复代码去除
    }
  },
  filters: {
 toUpperCase(value) {
 return value.toUpperCase();
 // 大写方法  fiters两个使用场景 {{ 数据绑定 }} v-bind指令
    }
  }
}

e9b0a4582ac853d9395c478780524153.png

全局Mixins:

import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

Vue.mixin({
 created() {
 console.log("全局的mixin")
  }
})
// 全局的mixins
new Vue({
 render: h => h(App),
}).$mount('#app')

Mixins渲染机制: 先渲染全局的,再渲染局部的,再渲染组件里的数据

Mixins是深拷贝,不是引用值

注意的点: 谨慎使用全局Mixins

文件已经使用组件,但是组件与组件之间代码还是有重复,就可以使用mixins

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值