2017-03-24 3 views
4

5 개 항목의 목록이 있고 사용자가 원하는 항목을 목록에서 삭제할 수있게하려고합니다. 이 경우 jQuery를 사용하면 특정 삭제 단추 클래스를 가리키고 'this'를 사용하여 가장 가까운 부모를 가리킨 다음 '.remove()'를 사용하여 DOM에서 제거 할 수 있습니다. 예 :각도 2의 .remove() 함수

$('.delete').click(function(){ 
 
    $(this).closest('li').remove(); 
 
})
ul li { 
 
padding:0.5em; 
 
list-style-type:none; 
 
margin-bottom:0.5em; 
 
} 
 

 
ul li span a { 
 
margin-left:100px 
 
} 
 

 
ul li span a:hover { 
 
text-decoration:underline; 
 
cursor:pointer; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
     <li>Item 1<span class="delete"><a>Delete</a></span></li> 
 
<li>Item 2<span class="delete"><a>Delete</a></span></li> 
 
<li>Item 3<span class="delete"><a>Delete</a></span></li> 
 
<li>Item 4<span class="delete"><a>Delete</a></span></li> 
 
<li>Item 5<span class="delete"><a>Delete</a></span></li> 
 
    </ul>

내가 각도 2에서 동일한 기능을 할 수 있는지 여부를 하시겠습니까?

실제 시나리오 코드는 다음과 같습니다 다른 사람이 지적

@Component({ 
    selector: 'myLevels', 
    template: ` 
     <template #clone> 
     <div class="addedLevel"> 
     <p>Paragraph Two</p> 
     <span #element><i class="fa fa-trash deleteLevel" (click)="removeLevel()"></i></span> 
     </div> 
     </template> 
     <div #container></div> 

     <button (click)="cloneTemplate()">Clone Template</button> 
    `, 
}) 

export class level implements OnInit, AfterViewInit { 

    // What to clone 
    @ViewChild('clone') template: any; 

    // Where to insert the cloned content 
    @ViewChild('container', { read: ViewContainerRef }) container: any; 

    cloneTemplate() { 
    this.container.createEmbeddedView(this.template); 
    } 

    constructor(private element: ElementRef) { } 
    ngOnInit() { } 
    ngAfterViewInit() { 
    // $(document).on('click', '.deleteLevel', function() { 
    // $(this.closest('.addedLevel')).remove(); 
    // }) 
    } 

    removeLevel() { 
    debugger; 
    console.log(this.element); 
    this.element.nativeElement.querySelector('.addedLevel').remove(); 
    } 

} 
+0

예상이 무엇을 희망 @sunit 파일. * ngFor를 사용하여 항목 반복 및 이벤트 바인더 및 이미 터를보십시오. 각도 2 문서를 참조하십시오. – Amit

+0

자, 실제 시나리오는 하나의 HTML 템플리트가 있는데, 복제하고 있으며 선택기를 사용하여 상위 div에 추가합니다. 삭제 아이콘이 너무 있습니다. 이제, 위와 동일한 기능을 원합니다. 이 경우 * ngFor를 사용하지 않습니다. 템플릿 복제 및 버튼 클릭 추가. –

+2

실제 시나리오 코드는 무엇입니까? – Amit

답변

1

으로, 심지어 DOM 자신에 액세스 할 필요가 전혀 없습니다. Angular가이를 처리합니다. ngFor을 사용하여 구성 요소의 배열에 바인딩하고 해당 구성 요소의 메서드를 사용하여 해당 배열을 변형하면됩니다.

빠른 예를 들어 여기 참조 : https://plnkr.co/edit/bGlsxog3tx13aszBv84u?p=preview

+0

예제가 좋은데, 문제는 동일하게 남아 있습니다. * ngFor를 사용하여 배열에서 'li'요소를 생성하는 것에 관심이 없습니다.내 문제는 복제 된 템플릿에서 HTML 요소와 태그를 추가 한 후 클릭이 발생한 특정 'div'를 어떻게 삭제할 수 있는가하는 것입니다. –

+0

클릭 이벤트에 매개 변수로'$ event'를 전달하면 원시 이벤트 데이터를 보낼 수 있습니다. 그렇다면, 그'srcElement' 속성을 얻습니다. 그러면 click 이벤트를 발생시킨 요소가 생겨서 거기에서 작업 할 수 있습니다. –

0

html 파일

<form #newForm="ngForm" novalidate (ngSubmit)="savenew(newForm)"> 
<ul> 
<li *ngFor="let item of items; let index = index"> 
    <div class="form-group"> 
    <input type="text" id="name{{index}}" class="form-control" 
    name="name{{index}}" ngModel #name{{index}}="ngModel" value= 
    {{item.name}}> 
    <input type="text" id="age{{index}}" class="form-control" 
    name="age{{index}}" ngModel #age{{index}}="ngModel" value={{item.age}}> 
    <button type="Button" (click)="remove(index)" >Remove</button> 
    </div> 
</li> 
</ul> 
<button type="button" (click)="addb()">Add</button> 
<button type="submit">Submit</button> 
</form> 

TS는

items: any[] = [ 
{ name: '', age :'' } 
]; 
addb(){ 
    this.items.push({name:'',age:''}); 
} 
remove(index: number): void { 
    this.items.splice(index, 1); 
} 

가 유 예 할 수