2017-09-06 47 views
1

我正在尝试使用PrimeNG树与模板。一切都显示正常,但我的模板内的任何点击选择/取消选择节点,是否有防止这种情况?在下面的代码我只想要的元素上点击呼叫DoSomething的(),而不是nodeSelected(),以及:如何防止在使用模板时触发PrimeNG Tree onNodeSelect()?

<p-tree [value]="tree" selectionMode="checkbox" [(selection)]="treeSelected" (onNodeSelect)="nodeSelected($event.node.data)"> 
    <ng-template let-node pTemplate="template1"> 
     {{node.label}} 
     <span class="labelDescription">Type 1</span> 
     <a href="javascript:void(0);" (click)="doSomething(node.data)">Do Something</a> 
    </ng-template> 
</p-tree> 
+0

认沽(点击)= “null” 会尝试在p-tree标记 – Vega

+0

@Vega - 嗯,我还是想nodeSelected()当单击复选框或标签时将被调用,而不是单击元素时。 – Learning2Code

+0

我明白了,这就是为什么要求尝试:)做到了'阻止'的原因吗? – Vega

回答

1

UPDATE:

为了防止点击事件的冒泡从项目于行,就把这里面doSomething()方法:

doSomething($event, item){  
    event.stopPropagation(); 
    // as before 
} 

并更改HTML这样:

<a href="javascript:void(0);" (click)="doSomething($event, node.data)">Do Something</a> 

老答案:

你可以尝试以下方法:

<p-tree [value]="tree" selectionMode="checkbox" (click)="null" 
[(selection)]="treeSelected" (onNodeSelect)="nodeSelected($event,$event.node.data)"> 

nodeSelected(event, element) 
    event.stopPropagation(); 
..... 
    // as before 
} 
+0

我添加了这个event.stopPropagation()doSomething(),而不是nodeSelected(),它工作。非常感谢。 – Learning2Code

+0

我混合冒泡和捕获。我想你也可以使用stopImmediatePropagation()。很高兴我能帮上忙。 – Vega

+0

传递$ event.node作为参数很不错。如果打印到控制台,我看到父母是未定义的?而不是停止传播,是否有可能获得父母? –

相关问题