Можно ли преобразовать строку в допустимое условие для использования в * ngIf для фильтрации данных?

В принятом ответе просто Jsoup.parse(html).text() есть 2 возможных вопроса (с JSoup 1.7.3):

  • Удаляет разрывы строк из текста
  • Он преобразует текст &lt;script&gt; в <script>

Если вы используете это для защиты от XSS, это немного раздражает. Вот мой лучший снимок в улучшенном решении, используя как JSoup, так и Apache StringEscapeUtils:

// breaks multi-level of escaping, preventing &amp;lt;script&amp;gt; to be rendered as <script>
String replace = input.replace("&amp;", "");
// decode any encoded html, preventing &lt;script&gt; to be rendered as <script>
String html = StringEscapeUtils.unescapeHtml(replace);
// remove all html tags, but maintain line breaks
String clean = Jsoup.clean(html, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
// decode html again to convert character entities back into text
return StringEscapeUtils.unescapeHtml(clean);

Обратите внимание, что последний шаг заключается в том, что мне нужно использовать вывод как обычный текст. Если вам нужен только вывод HTML, вы можете его удалить.

И вот куча тестовых примеров (вход для вывода):

{"regular string", "regular string"},
{"<a href=\"link\">A link</a>", "A link"},
{"<script src=\"http://evil.url.com\"/>", ""},
{"&lt;script&gt;", ""},
{"&amp;lt;script&amp;gt;", "lt;scriptgt;"}, // best effort
{"\" ' > < \n \\ é å à ü and & preserved", "\" ' > < \n \\ é å à ü and & preserved"}

Если вы найдете способ сделать это лучше, пожалуйста, дайте мне знать.

1
задан velez11 31 March 2019 в 01:56
поделиться

2 ответа

Если вам нужно, и вы хотите иметь только предложения ANDed, а ваши предложения - это простые проверки на равенство (как предполагает формулировка вашего вопроса) ... тогда сделайте ваш *ngIf="condition(item, conditions)"

Здесь conditions будет быть переменной-членом класса, представляющей собой массив объектов вида {key: string, value: any}, который вы бы построили в этом массиве вместо вашего строкового выражения, а condition была бы функцией, которую вы определили в своем наборе текста, что-то вроде это:

condition(item, conditions) {
  if(!item) return false;
  if(!Array.isArray(conditions) || (conditions.length === 0)) return true;
  for(let i = 0; i < conditions.length; i++) {
    if(item[conditions[i].key] !== conditions[i].value) {
       return false;
    }
  }
  return true;
}
0
ответ дан vicatcu 31 March 2019 в 01:56
поделиться

Попробуй, надеюсь, это тебе поможет. Спасибо

TS

aData = [
    { "color":"blue","max":0, min:1, name:"joe","city":"neardenlans"},
    { "color":"red","max":50, min:5, name:"joe","city":"manila"},
    { "color":"pink","max":100, min:25, name:"joe","city":"neardenlans"},
    { "color":"gray","max":0, min:63, name:"joe","city":"new york"}
] 

condition(item) {
    if(item.color == 'pink' && item.max == 100 && item.name == 'joe') {
      return item;
    };
}

HTML

<div *ngFor="let item of aData">
 <span *ngIf="condition(item)">
  Name: {{item.name}}
  Color: {{item.color}}
  Max: {{item.max}}
 </span>
</div>
0
ответ дан Hassan Siddiqui 31 March 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: