2016-07-29 2 views
0

요소의 innerHTML을 가져 오는 데 문제가 있습니다. 필자는 이오니아/각도/Typescript 형식의 프로젝트를 가지고 있으며, 한 페이지는 여러 가지 이온 항목이있는 이온 목록으로 구성되어 있습니다. 검색 상자가있어서 검색 입력에서 문자열이 포함 된 이온 항목 만보고 싶습니다. 입력 내용과 일치하는 목록의 항목 필터링

난 같은 시도 :

<ion-list> 
<ion-item *ngIf="f(this)"> ... 
</ ion-item> 
</ ion-list> 

및 검색 입력이 그 요소의 innerHTML에 일치 (또는하는 TextContent) 여부를 파라미터로서 요소 및 검사를받는 함수를 썼다.

public f(t: HTMLElement): boolean { 
    return t.textContent.indexOf(this.searchInput) !== -1; 
} 

이 논리의 문제점은 "this"가 함수 내부에서 정의되지 않은 것 같습니다.

+1

우리에게 당신이 쓴 기능을 보여주십시오 - 그것에 대해 어떤 질문에 대답하기 위해 우리가 필요합니다. – moopet

+0

public f (t : HTMLElement) : 부울 { return t.textContent.indexOf (this.searchInput)! == -1; } – flaviumanica

답변

0

이 함수를 어디에서 호출했는지 알 수는 없지만 일부 이벤트 핸들러에서 온 것일 수 있습니다.

보존되는, 화살표 함수로 함수를 정의 해보십시오 "주변" this

const f = (t: HTMLElement): boolean => { 
    return t.textContent.indexOf(this.searchInput) !== -1; 
} 
+0

해당 함수는 * ngIf에 있습니다. 내가 원래 게시물에 쓴 것처럼 여러 개의 이 있으며 검색 입력을 기반으로 가시성이 변경되기를 바랍니다. 그렇기 때문에 HTML로 작성하려고 한 이유는 다음과 같습니다. ... f 함수는 true 또는 false를 반환합니다. 문제는 함수의 처리가 정의되지 않았다는 것입니다 (즉, 필요한 내용을 함수로 제대로 전달하지 못하는 이온 항목). – flaviumanica

+0

아 그래, 나는 그 글을 완전히 읽지 않았습니다. 또한 나는 이오니아도 각도도 사용하지 않습니다. 어쨌든, 위의 화살표 함수로 함수를 정의 해 보았습니다. 'this'는 클래스의 인스턴스입니다 (호출하는 요소가 아닙니다). –

+0

예, 했어요, 똑같습니다. 이 문제는 함수 내부의 "this"가 아니라 HTML의 "this"를 사용하여 발생합니다. HTML 객체가 존재하지 않는 것처럼 보입니다. 모든 것을 클릭 이벤트에 넣고 매개 변수로 이벤트를 보내고 소스를 가져 가면 작동합니다. 하지만 나는 그것이 클릭되기를 기다리는 것을 원하지 않는다 ... – flaviumanica

관련 문제