2017-03-16 128 views
0

我想用typeScript + Angular2構建一個簡單的遞歸樹。 當我到了第二級節點顯示一秒鐘然後消失,我想一些事件正在清洗我的收藏,但我無法弄清楚哪一個。 這是我的代碼:遞歸樹,節點正在消失

@Component({ 
 
    
 
    selector: 'sp-item-template', 
 
    template: 
 
    ` {{CurrItem.Title}} 
 
     <div *ngIf="CurrItem.subItems"> 
 
     <ul> 
 
      <li *ngFor="let item of CurrItem.subItems" (click)="folderClick(item)">       
 
       <sp-item-template [CurrItem] = "item" ></sp-item-template> 
 
      </li> 
 
     </ul> 
 
    </div> 
 
    ` 
 
// templateUrl:'./sp-lists.component.html' 
 
}) 
 

 
export class SpItemTemplate 
 
{ 
 
    @Input() CurrItem:SpItem; 
 
    private listsService: SpListService 
 
    constructor(@Inject(SpListService) list_service: SpListService){this.listsService = list_service;} 
 

 
    private folderClick(item: SpItem) 
 
    { 
 
     item.setListService(this.listsService); 
 
     item.GetSubFolders(item.ParentWebRelativeUrl); 
 
    } 
 
}

import { Component, Inject } from '@angular/core'; 
 
import {SpListService} from './sp-list.service' 
 

 
export class SpItem 
 
{ 
 
    Title: string; 
 
    Id: string; 
 
    Name:string; 
 
    RelativeUrl:string; 
 
    Type:string; 
 
    ParentWebRelativeUrl: string; 
 

 
    private subItems:SpItem[]; 
 

 
    private listsService: SpListService 
 
    constructor(@Inject(SpListService) list_service: SpListService){this.listsService = list_service;} 
 

 
    public setSpItemAsDoclib(title:string, id:string, name:string, parentWebUrl:string):void 
 
    { 
 
     this.Title = title; 
 
     this.Id = id; 
 
     this.Name = name; 
 
     this.ParentWebRelativeUrl = parentWebUrl; 
 
     this.RelativeUrl = parentWebUrl + "/" + name; 
 
    } 
 

 
    public setSpItemAsFolder(name:string, relativeUrl:string, type:string):void 
 
    { 
 
     this.Name = name; 
 
     this.Title = name; 
 
     this.RelativeUrl = relativeUrl; 
 
     this.Type = type; 
 
    } 
 

 
    public setListService(ListService:SpListService):void 
 
    { 
 
     this.listsService = ListService; 
 
    } 
 

 
    public GetSubFolders(parentWeb:string): void 
 
    { 
 
     let hostName = location.protocol + '//' + location.host; 
 
     //this.listsService.getFolders(hostName + "/"+ this.ParentWebRelativeUrl +"/_api/web/GetFolderByServerRelativeUrl('" + this.RelativeUrl +"')/folders") 
 
     this.listsService.getFolders(hostName + "/"+ parentWeb +"/_api/web/GetFolderByServerRelativeUrl('" + this.RelativeUrl +"')/folders") 
 
     .then(listRslt => 
 
     { 
 
      for (let item of listRslt) 
 
      { 
 
       item.ParentWebRelativeUrl = parentWeb; 
 
      } 
 
      this.subItems = listRslt 
 
     }); 
 
    } 
 
}

+0

你可以添加一個工作的蹲點展示發生了什麼?很難直觀地看到什麼得到了渲染 –

+0

我沒有看到在掠奪者angular2選項。我可以向你發送代碼嗎? –

回答

0

找到了problom:我缺少的,如果檢查,如果節點有兒童。 不知道爲什麼它沒有裁決的兒童,但增加了這一點,如果解決問題。

private folderClick(item: SpItem) 
    { 
    item.setListService(this.listsService); 
    item.setGlobalService(this.globalService); 

    **if(item.subItems == null)** 
    { 
     item.GetSubFolders(item.ParentWebRelativeUrl); 
    }  
    item.GetDocuments(item.ParentWebRelativeUrl); 
    }