2017-10-17 52 views
2

如果某个元素具有(click)处理程序,并且您在此元素中选择了一些文本,则会调用(click)处理程序。有没有办法来防止这种情况?说明问题的Here's a Plunkr。相关代码:Angular(2/4):选择文本触发单击事件

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2 (click)="handleClick()">Click or select this text</h2> 
    </div> 
    ` 
}) 
export class App { 
    public handleClick() { 
    alert('you clicked'); 
    } 
} 

回答

2

使用此代码

public handleClick() { 
    var selection = window.getSelection(); 
    if(selection.toString().length === 0) { 
     alert('you clicked'); 
    } 

} 
1

传递click事件($event)到​​方法

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2 (click)="handleClick($event)">Click or select this text</h2> 
    </div> 
    ` 
}) 

然后使用下面的代码来获得选择类型:

export class App { 
    public handleClick(event) { 
    if (event.view.getSelection().type !== 'Range') { 
     alert('you clicked'); 
    } 
    } 
} 

或:

export class App { 
    public handleClick(event) { 
    if (event.view.getSelection().toString().length === 0) { 
     alert('you clicked'); 
    } 
    } 
} 

Plunker演示:https://plnkr.co/edit/PEPyPzDkFjweyAHK8Tj6?p=preview

相关问题