のコンポーネントとの間の値をフィルタリング私はそうのような値posts
に引っ張る成分を有する:共有およびangular2
import { Component, OnInit} from "@angular/core";
import template from "./event.component.html";
import style from "./event.component.scss";
@Component({
selector: "EventComponent",
template,
styles: [ style ]
})
export class EventComponent implements OnInit {
posts = [];
constructor() {}
ngOnInit() {
this.posts = {'test': 0,'test': 1};
}
}
これはそのようにようなHTMLテンプレートに張架し、この内の別のコンポーネントに注入されます"mapCompenent" と呼ばれる場合、それはまた、パイプを使用してHTMLにフィルタである:
ループ 'EventComponent' コンテンツ
<input id="search_events" type="text" name="search_events" [(ngModel)]="search" ngDefaultControl/>
<mapCompenent [(posts)]="posts"></mapCompenent>
<div class="col s6 m6 l4 cards-container" *ngFor="let post of posts | searchPipe:'name':search "></div>
フィルタ
import { Pipe, PipeTransform, Input, ChangeDetectorRef } from '@angular/core';
import { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms';
@Pipe({
name : 'searchPipe',
pure: false,
})
export class SearchPipe implements PipeTransform {
public transform(value, key: string, term: string) {
if(term === '' || typeof term === undefined){
return value;
}
return value.filter((item) => {
if (item.hasOwnProperty(key)) {
if (term) {
let regExp = new RegExp('\\b' + term, 'gi');
//this.ref.markForCheck();
return regExp.test(item[key]);
} else {
return true;
}
} else {
return false;
}
});
}
}
とすぐにページがフィルタがポストをフィルタリングするために使用されている場合mapcomponentがngOnChangesグラブではなく、ロードされているようmapComponent
import { Component, OnInit, Input, OnChanges, SimpleChanges, SimpleChange } from "@angular/core";
import template from "./map.component.html";
import style from "./map.component.scss";
@Component({
selector: 'mapCompenent',
styles: [ style ],
template
})
export class MapComponent implements OnInit, OnChanges{
@Input() posts: object = {};
ngOnInit() {
}
ngOnChanges(changes: SimpleChanges) {
const posts: SimpleChange = changes.posts;
console.log('prev value: ', posts.previousValue);
console.log('got posts: ', posts.currentValue);
}
}
、ループ投稿が正常に更新され、フィルタが動作します。問題はmapcomponentです。 postsコンポーネントへの変更をmapcomponentに通知する最良の方法は何ですか?あなただけ*ngFor
でフィルタされたバージョンを使用しているので、
私は同じことを考えて、ポストではなく、私はちょうど得る無駄にパイプを試してみました: '' 'エラー:キャッチされない(約束で):エラー:テンプレートの解析エラー: パーサエラー:アクションexpreにパイプを入れることはできません[投稿| searchPipe: 'wpcf-event-cat-location':search = $ event] '' ' – vimes1984
@ vimes1984恐らくあなたがそこに双方向データをバインドしているからでしょう。一方通行でなければなりません。それ以外の場合は、同じ方法を同じ方法で2回フィルタリングするよりも優れていると思います。 – Danziger
2番目の解決策では、@Component宣言に入るはずのコンストラクタにフィルタを挿入できません。 – vimes1984