我有一个输入(右上角),用户可以在其中搜索内容,当它的指令长度为3个字符时,它将显示产品列表并突出显示匹配项...

看看我的代码:

html

<div id="app">
  <div id="header">
    <div class="right"><input type="text" v-model="message" v-on:keyup="searchStart()" v-on:blur="searchLeave()"/>
      <ul v-if="this.searchInput" class="product-list">
      <li v-for="product in products">
        {{ product.id }} - {{ product.name | highlight }} - {{ product.qtd }}</li></ul>
    </div>
  </div>
  <div id="main">
    <div id="menu">fdfds</div>
    <div id="container">{{ message }}</div>
  </div>
</div>

js

var search = new Vue({
  el: "#app",
  data: {
    message: "",
    searchInput: false,
    products: [
      {
        id: 1,
        name: "produto 01",
        qtd: 20
      },
      {
        id: 2,
        name: "produto 02",
        qtd: 40
      },
      {
        id: 3,
        name: "produto 03",
        qtd: 30
      },
    ]
  },
  methods: {
    searchStart: function(){
      if(this.message.length >= 3)
        this.searchInput = true;
      console.log(this.searchInput);
    },
    searchLeave: function(){
      this.searchInput = false;
      this.message = "";
      console.log(this.searchInput);
    }
  },
  filters: {
    highlight: function(value){
      return value.replace(search.message, '<span class=\'highlight\'>' + search.message + '</span>');
    }
  }
});

在这里你可以看到一支活笔:http://codepen.io/caiokawasaki/pen/dXaPyj

试着在钢笔里打prod...

我的过滤器正确吗?我创建过滤器的方式正确吗?

主要问题是:如何从我的过滤器中输出HTML?

编辑/解决方案

本例中的问题是codepen,与vue存在某种冲突,因此我无法使用{{{}}}来转义html,将代码放入另一个编辑器(jsfidle)中,结果成功了.

我接受奖励的答案,因为它是正确的.

推荐答案

你需要三个步骤来实现你的目标:

  • 使用三个大括号{{{}}来显示未zoom 的html
  • 按v-model变量筛选用户,以便只显示匹配项
  • <span>标记替换匹配的子字符串

filteredUsers中判断"工作"属性

Vue.js相关问答推荐

如何默认打开一个v-list-group?

Nuxt3 / Vue3 - 当属性更改时如何动态更改渲染组件?

Vue 3 范围滑块中的多个值

Vue Datepicker 不会在渲染时显示默认日期

在 Vuex Store 模块中使用 Vue.js 插件

运行vue-cli-service build --watch时没有 CSS 文件

动态插入字符串上的 Vue 事件处理程序不起作用

Vue-router:循环路由以动态创建

为什么不先移动鼠标就无法滚动视差?

在 SASS 中使用 Vuetify 类

VueJS + VueRouter:有条件地禁用路由

Vue:从 Vue 实例更新组件数据

如何在nuxt路由中添加meta?

如何将 v-if 与 Vue.js 中的值进行比较

Nuxt 应用程序在刷新动态路由时返回 404(Tomcat 服务器)

基于媒体查询的vue绑定值

Vue 3:模块 '"../../node_modules/vue/dist/vue"' 提示

如何在 Vue.js 应用程序中正确下载 Excel 文件?

了解 Nuxt.js 中的State状态和Getters:Getters不起作用

构建 Vue.js 应用程序时 JavaScript 堆内存不足