2016-09-22 23 views
2

我在使用Javascript的角度2中。如何获得角度为2且只有javascript的指令中的当前元素的访问权限

在一个指令中,我需要访问当前元素才能操作DOM。

请注意,我不能在hashtag(#element)中使用这个技巧,因为我会有很多像这样的元素。每个人都会有我的指示。

的Html

<p [focus]="p1.focus"></p> 
<p [focus]="p2.focus"></p> 
<!-- ... --> 

的Javascript

(function (app) { 

app.Focus = 
ng.core.Directive({ 
    selector: "[focus]", 
    inputs: ['focus'], 
}).Class({ 
    constructor: function() { 
     // how get access to the current element here 
    } 
}) 
})(window.app || (window.app = {})); 

你知不知道我该怎么办呢?

不幸的是,正式文件还没有为JavaScript

+0

你试过用'this'吗? – vinagreti

+0

'this'返回指令,但不返回DOM中的当前元素。 –

+0

我可以告诉你打字稿吗?你能转换它吗? – micronyks

回答

1

我的错误,我忘记注入JavaScript。好的答案是:

constructor: [ ng.core.ElementRef, function(elementRef) { 
     // elementRef.nativeElement 

}] 
+0

如果能解决您的问题,您可以将答案标记为唯一答案! – vinagreti

2

我不知道如何在的JavaScript写代码,但如果这打字稿代码可以帮助你很清楚。

import { Component, ElementRef,Renderer } from '@angular/core'; 


@Directive({ 
    selector: "[focus]", 
    inputs: ['focus'], 
    host: { 
    '(click)':'click()', 
    }, 
}) 

export class myDirective{ 
    constructor(private el:ElementRef) { 
     console.log(el)//<-----------current element 
    } 
    click(){ 
     console.log(this.el) //<------------current element 
    } 
} 
+0

下面是一些使用纯JS的技巧:https://angular.io/docs/js/latest /quickstart.html – vinagreti

+0

@vinagreti谢谢你,但问题是我不想继续使用JS。 – micronyks

+1

谢谢@micronyks。只是看到我的打字稿版本提醒我注入依赖。 –

0

我使用此javascript来更改活动主题的css文件。也许你可以适应:

var KetoApp = { 
    changeTheme: function(event, element) { 
     var theme = $(element).data("theme"), 
     themeLink = $('link[href$="theme.css"]'), 
     newThemeURL = 'node_modules/primeng/resources/themes/' + theme + '/theme.css'; 

     themeLink.attr('href', newThemeURL); 
     event.preventDefault(); 
    } 
};