ShowBlogs.vue

<template>

  <!-- 自定义指令的参数如果是字符串需要加单引号 -->

  <div id="show-blogs" v-theme:column="'narrow'">

  <h1>博客总览</h1>

  <input type="text" placeholder="搜索" v-model="search"/>

  <div v-for="blog in filteredBlogs" class="single-blog">

  <!-- 自定义指令v-rainbow 在main.js中定义 -->

  <!-- 使用管道后面的过滤器 to-uppercase -->

  <router-link v-bind:to="'/blog/'+ blog.objectId">

      <h2 v-rainbow>{{blog.title | to-uppercase}}</h2> </router-link>

  <article>{{blog.content | snippet }}</article>

  </div>

  </div>

</template>

<script>

export default {

  name: 'show-blogs',

  data(){

  return {

  blogs:[],

  search:""

  }

  },

  created(){

    const query = Bmob.Query("blog");

    var blogsArray = [];

    query.find().then(res => {

        this.blogs = res;

    });

  },

  computed:{

    //进行过滤的方法

  filteredBlogs:function(){

  return this.blogs.filter((blog)=>{

  return blog.title.match(this.search);

  })

  }

  },

  //局部的过滤器和自定义指令

  filters:{

  "to-uppercase":function(value){

  return value.toUpperCase();

  }

  },

  directives:{

    //这不是一个方法,是一个绑定值

  "rainbow":{

  bind(el,binding,vnode){

  el.style.color = "#"+Math.random().toString(16).slice(2,8);

  }

  }

  }

}

</script>

<style>

#show-blogs{

max-width: 800px;

margin: 0 auto;

}

.single-blog{

padding:20px;

margin:20px 0;

box-sizing:border-box;

background:#eee;

  border:1px dotted #aaa;

}

#show-blogs a{

  color:#444;

  text-decoration:none;

}

input[type="text"]{

  padding:8px;

  width:100%;

  box-sizing:border-box;

}

</style>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容