2016-09-22 45 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(); 
    } 
}; 
相關問題