2017-01-30 14 views
1

Relativley новый для угловых и Дарта у меня есть следующая проблема:Как выбрать элемент шаблона по ID в Angular 2 Dart?

my_component.dart:

import 'package:angular2/core.dart'; 
import 'package:angular2_components/angular2_components.dart'; 

import 'package:google_maps/google_maps.dart'; 
import 'dart:html'; 


@Component(
    selector: 'google-route-map', 
    styleUrls: const ['my_component.css'], 
    templateUrl: 'my_component.html', 
    directives: const [materialDirectives], 
    providers: const [materialProviders], 
) 
class MyComponent { 

    MyComponent() { 

    var m = querySelector("#my-canvas"); 

    print (m); // is null 

    // do something with m.... 
    } 
} 

my_component.html:

<div id="my-canvas"></div> 

Насколько я понял, проблема заключается в том, что querySelector запросы только база dom не shadowDom.

Как я могу просто запросить идентификатор внутри моего шаблона?

+0

Это зависит от того, где '# мой-canvas' приходит и как он будет создан. Ваш вопрос не содержит никакой информации об этом. Согласно вашему редактированию, это часть шаблона компонентов, иначе '@ViewChild()' не будет работать, но '@ViewChild()' не является «select by ID». Поэтому я немного смущен о вашем дополнении к моему ответу. –

+0

Да, его часть шаблона компонентов. Однако с помощью querySelector элемент все еще был «null». Есть ли другая возможность выбора по идентификатору? Пропустили что-то, может быть? – Blackbam

+0

Я обновил свой ответ. Это должно сработать. Но '@ViewChild()' обычно является лучшим способом для вашего использования. –

ответ

4

Переместить код ngAfterViewInit()

class MyComponent implements AfterViewInit { 

    @ViewChild("mapCanvas") 
    ElementRef canvas; 

    @override 
    void ngAfterViewInit() { 
    DivElement m = canvas.nativeElement; 
    ... 
    } 
} 

Когда конструктор выполняется, нет DOM создан еще для компонента.

РЕДАКТИРОВАТЬ: Правильно, но элемент по-прежнему равен нулю. Теперь работает после доступа к нему в виде привязки по углу с аннотацией ViewChild.

<div #mapCanvas></div> 

обновление

<div id="my-canvas"></div> 
class MyComponent implements AfterViewInit { 
    ElementRef _elementRef; 

    MyComponent(this._elementRef); 

    @override 
    void ngAfterViewInit() { 
    var canvas = _elementRef.nativeElement.querySelector("#my-canvas"); 

    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^