如何在AngularJS 1.5.11中过滤两个(仅在视觉上)联接的表达式

时间:2018-08-01 10:16:55

标签: angularjs angularjs-filter

场景: 我有一个项目数组,每个项目都有属性(模型,id),

$scope.arrayOfItems = [{
                         model : 'L_',
                         id : 01
                       },
                       {
                         model : 'L_',
                         id : 2323
                       },
                       {
                         model : 'L_',
                         id : 434
                       }
                    ];

对于每个项目,这两个属性都合并成一个项目标签。 我正在尝试过滤两个 VISUALLY 合并表达式

{{::item.model}}{{::item.id}}

model = 'L_';
id    = 03;

因此结果将是 L_03

如果我想在输入字段中搜索标签'L_2323',然后键入'L _',然后输入ID,所有列表项都会消失。 / p>

我希望能够键入'L_2323'并显示相应的列表项

我知道我可以遍历并合并所有模型和id,并放入控制器中的数组中,并在主要项目的循环中显示该数组的每个项目,但这似乎是一种浪费的解决方案,我正在尝试以更务实的方式解决问题

我已经添加了此错误的代码笔
Codepen

2 个答案:

答案 0 :(得分:1)

基本搜索代码可以是这样的:

const arr = [{
  model: 'L_',
  id: '01'
}, {
  model: 'L_',
  id: '2323'
}, {
  model: 'L_',
  id: '434'
}];

const search = function(searchTerm) {
  return arr.filter(item => {
    const fullName = item.model + item.id;
    return fullName.includes(searchTerm);
  })
}

const searResult1 = search('01');
console.log(searResult1);

const searResult2 = search('L_');
console.log(searResult2);

https://jsfiddle.net/90Lc7dt8/8/

我们在这里做的是:

  1. 创建一个变量fullName,其中包含您要搜索的信息
  2. 使用过滤器返回与模式匹配的项目

现在,您需要的只是输入的角度代码。

  1. 在输入上使用ng-model
  2. 将搜索功能作为监视功能
  3. 使用ng-repeat列出结果

以下是有关码笔的角度示例: https://codepen.io/bergur/pen/yqKaKw?editors=1010#0

答案 1 :(得分:1)

只需编写一个自定义过滤器,即可扫描数组以查找#encoding: utf-8 import re from bs4 import BeautifulSoup #example HTML html = """ <html> <head> <title>Link page</title> </head> <body> <a href="https://www.google.com" class="link">Google</a> <a href="https://www.yahoo.com" class="link">Yahoo</a> <a href="https://www.stackoverflow.com" class="link">Stackoverflow</a> </body> </html> """ parsed_html = BeautifulSoup(html, "lxml") links = [a["href"] for a in parsed_html.find_all("a")] if len(links) ==0: print("Sorry, no links found") else: count = len(links) for e in links: print(e) #print the total amount of links print(count, "links in total") print('--------------') 的匹配项。这是它的外观的快速演示:

model + id
var app = angular.module('myApp', []);
app.filter('myFilter', function() {
  return function(arrayOfItems, input) {
    var res = [];
    if (input) {
      for (var i = 0; i < arrayOfItems.length; i++) {
        var item = arrayOfItems[i];
        if ((item.model + item.id).match(input)) { // match
          res.push(item);
        }
      }
      // don't return an empty array if nothing was found
      return (res.length > 0) ? res : arrayOfItems; 
    }
    return arrayOfItems; // default (no input given)
  };
});

app.controller('namesCtrl', function($scope) {
  $scope.arrayOfItems = [{
      model: 'L_',
      id: 01
    },
    {
      model: 'L_',
      id: 2323
    },
    {
      model: 'L_',
      id: 434
    }
  ];
});