首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vue过滤器从vue 1迁移到vue 2

Vue过滤器从vue 1迁移到vue 2
EN

Stack Overflow用户
提问于 2017-07-18 11:09:54
回答 1查看 1.2K关注 0票数 7

在将过滤器从vue 1迁移到vue 2时,我遇到了问题,我在这里创建了所需的内容(突出显示与输入文本匹配的文本):

代码语言:javascript
复制
Vue.component('demo-grid', {
  template: '#grid-template',
  props: {
    filterKey: String
  },
  data: function () {
    return {
     searchParams: [
     { key: '' }
     ],
      suggestions: [
        { message: 'Foo' },
        { message: 'Bar' },
        { message: 'Foobar' },
        { message: 'pikachu' },
        { message: 'raichu' }
      ]
    }
  },
  filters: {
    highlight: function(words, query){
        var iQuery = new RegExp(query, "ig");
        return words.replace(iQuery, function(matchedTxt,a,b){
            return ('<span class=\'highlight\'>' + matchedTxt + '</span>');
        });
    }
  }
})


// bootstrap the demo
var demo = new Vue({
  el: '#demo'
})

https://jsfiddle.net/t5ac1quc/23/ VUE-1资源

https://jsfiddle.net/t5ac1quc/25/ VUE-2资源

我将非常感谢你给我所有的答案

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-18 11:32:58

更新小提琴

代码语言:javascript
复制
<template id="grid-template">
  <ul>
    <li v-for="suggest in suggestions" v-html="highlight(suggest.message, filterKey)"></li>
  </ul>
</template>

<div id="demo">
  <form>
    Search <input v-model="searchParams.key">
  </form>
  <demo-grid :filter-key="searchParams.key"></demo-grid>
</div>
代码语言:javascript
复制
Vue.component('demo-grid', {
  template: '#grid-template',
  props: {
    filterKey: String
  },
  data: function () {
    return {
      suggestions: [
        { message: 'Foo' },
        { message: 'Bar' },
        { message: 'Foobar' },
        { message: 'pikachu' },
        { message: 'raichu' }
      ]
    }
  },
  methods: {
    highlight: function(words, query) {
      var iQuery = new RegExp(query, "ig");
      return words.replace(iQuery, function(matchedTxt,a,b){
          return ('<span class=\'highlight\'>' + matchedTxt + '</span>');
      });
    }
  }
})

new Vue({
  el: '#demo',
  data: {
    searchParams: {
      key: '',
    },
  },
});

摘要:

  • 当使用<script>标记存储模板时,设置type="template" (或类似的)以防止浏览器以JavaScript的形式执行模板。或者更好地使用<template>
  • 不再支持{{{ html }}}语法。在Vue 2中,您必须使用v-html指令。
  • 因为v-html是一个指令(并且不使用{{ }}内插),所以它不使用过滤器语法。用一种方法代替。
  • 您对数据的范围有一些问题。根组件需要为模板中使用的searchParams定义数据。另外,searchParams是一个数组,但您没有将它用作数组(searchParams.key);这将不能用于Vue 2(必须预先正确声明所有反应性数据属性)。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45165086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档