2017-03-31 5 views
0

EDIT : 문제점을 발견했습니다. 그게 뭔지 알아? 크롬 캐싱 문제. Chrome은 캐시를 저장하고 디버거가 열려 있고 명시 적으로 내 페이지를 새로 고치는 동안 캐싱을 해제 할 때까지 어디에도 없습니다. 일단 내가 상쾌하게되면, 나는 잡히는 사건을 얻는 것을 시작했다.Angular2 : 지시문이로드 되나 아무 것도 수행하지 않습니다.

원래 포스트 : onload, onblur, 또는 onfocus : 나는 세 가지 이벤트 중 하나의 컨트롤에 따라 행동하기로했다 정의 각도 지침이있다. 이 컨트롤은 input 컨트롤에 적용되며 비활성화 될 수도 그렇지 않을 수도 있습니다. 나는 onbluronfocus이 무능력한 통제에서 쓸모 없다는 것을 알고 있지만 결코 나타나지 않는 사건을 듣는 데 전혀 해를 끼치 지 않을 것이라고 생각합니다. 반면에, 활성화 된 컨트롤은 이러한 이벤트를 발생 시키므로 듣고 있어야합니다. 이 지시문은 매우 일반적으로 설계되었으므로 비활성화되고 활성화 된 input 컨트롤을 모두 처리해야합니다.

문제는 아무것도 수행하지 않는 것입니다. 최소한 아무 것도하지 않는 것 같습니다. 지시문이 인스턴스화됩니다. 생성자가 실행되지 않았 음을 확인했으며, 입력 컨트롤에 elementRef이 가리키는 지 확인했습니다.하지만 그것에 관한 내용입니다. 청취자 중 누구도 일하지 않습니다.

사용법 :

<input myDirective disabled id="someId" name="someName" [ngModel]="myValue" /> 

지침 : 나는 모든 것을 실행하면 잘로드

import { Directive, HostListener, ElementRef, Input } from "@angular/core"; 

@Directive({ selector: "[myDirective]" }) 
export class MyDirective { 
    constructor(private elementRef: ElementRef) { 
    } 

    @HostListener("focus", ["$event.target.value"]) 
    onFocus(value: string) { 
     console.log("MyDirective: Focus caught."); 
    } 

    @HostListener("blur", ["$event.target.value"]) 
    onBlur(value: number) { 
     console.log("MyDirective: Blur caught."); 
    } 

    @HostListener("load", ["$event.target.value"]) 
    onLoad() { 
     console.log("MyDirective: Load caught."); 
    } 
} 

. 누락 된 모듈, 누락 된 구성 요소 등의 문제는 없습니다. 콘솔에 오류가 없습니다. 앞에서 언급했듯이 디버거를 사용하여 코드를 분해하더라도 지시문이 인스턴스화되었는지 확인합니다. 하지만 콘솔 출력도 없습니다. 나는 적어도 onload 이벤트를 기대하고있다. 비활성화 된 input 컨트롤이 해당 컨트롤을 실행하지 않습니까? 그것은 윈도우 이벤트가 아닌 형태의 이벤트

다음은 폼 요소에 대해 처리 할 수있는 이벤트의 목록입니다 때문에

+0

어디에서이 지시문을 제공하고 어디에 사용합니까 (구성 요소 간의 관계)? – echonax

+0

매개 변수가있는 메서드 대신 @HostBinding ('value')을 사용해야합니다. – Fals

+0

@ Fals : 어떻게 도움이 될지 모르겠습니다. 이것은 단순화 된 버전입니다. 실제로 이벤트를 잡을 수 있는지 테스트하는 것일뿐입니다. 나는'load'를'value'와'change'로 바꾸려고 시도했습니다. 그리고 무능력한 Input 컨트롤에서 이것을 시도했습니다.전혀 '불투명'하지 않고 '집중'이 아니라 '가치/변화 /로드'가 아닙니다. 아무것도. 나는 심지어 onInit을 처리하고 컨트롤의 ID를 출력하고 zip을 얻었습니다. "id = undefined". –

답변

1

onLoad이 작동하지 않습니다

onblur 
onchange 
oncontextmenu 
onfocus 
oninput 
oninvalid 
onreset 
onsearch 
onselect 
onsubmit 

당신은 그것을 참조했다 from this documentation 업데이트를 기반으로 업데이트

MDN 링크가 위의 대답을 지원할 것으로 예상 했으므로 here it is

enter image description here

자원 이벤트는 웹 URL로 인터넷에있는 자원을 말한다.

+0

일반적으로 w3schools는 배우기에 최고의 장소가 아닙니다. 정확하고 정확하게 설명되지 않은 많은 것들이있었습니다. MDN은 연결하기에 훨씬 좋은 곳입니다. – Bakudan

+0

업데이트 된 답변 확인 – Aravind

+0

onLoad가 작동하지 않고 이에 상응하는 양식 이벤트가없는 경우 컨트롤이 표시 될 때 사용할 수있는 이벤트가 있습니까? 내 단축 버전을 제쳐두고,로드 할 때 입력 상자에 값을 형식화하려고하지만 실제로로드 될 때 알 필요가 있습니다. 또는 Directive에서 OnInit을 사용하고 elementRef.target.value를 형식이 지정된 값으로 설정할 수 있습니까? –