Используйте DartAngular с dart:html

Можно ли использовать библиотеку дартс по умолчанию html с угловым дротиком? то есть:

class Test1Component implements OnInit{
  @override
  void ngOnInit() {
    ButtonElement button = querySelector('button');
    //Broken code, avoid button to be null.
    button.onClick.listen(onClick);
  }

  void onClick(Event e){
    print('Button clicked');
  }
}

Как я могу избежать "нулевой" кнопки без использования таймеров?

В основном я использую только угловой только для маршрутов, но я хотел бы придерживаться dart:html контролировать DOM и события.

2 ответа

Решение

Да, вы можете сделать это, но обычно это не очень хорошая идея.

Используйте вместо @ViewChild(...) или аналогичные угловые методы для получения ссылок на элементы в представлении компонентов.

<button #myButton>click me</button>
@ViewChildren('myButton')
set myButton(List<Element> value) {
  if(value.isNotEmpty) {
    print(value.first);
  }
}

Если вы хотите просто добавить обработчик кликов, используя

<button (click)="onClick">click me</button>

было бы лучше, но кажется, что вы как-то динамически добавляете кнопку, а декларативное добавление обработчика щелчков может не сработать в этом случае (потребуется больше информации)

РЕДАКТИРОВАТЬ: Если кто-то, как я хочу использовать dart:html вместо углового кода ng, можно использовать его

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

// AngularDart info: https://webdev.dartlang.org/angular
// Components info: https://webdev.dartlang.org/components

@Component(
  selector: 'container',
  template: '<h1>Test 1</h1><button #test1>Bottone test 1</button>',
)
class Test1Component implements OnInit{

  @ViewChild('test1')
  ButtonElement button;


  @override
  void ngOnInit() {
    //Verified that button is initialized
    print(button);
    //Initialize click
    button.onClick.listen((e) => print("Clicked"));
  }
}
Другие вопросы по тегам