将DartAngular与dart:html一起使用

时间:2018-08-22 15:09:01

标签: dart angular-dart 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');
  }
}

如何避免不使用任何计时器而获得“空”按钮?

基本上,我只为Routes使用角度,但是我想坚持使用dart:html来控制DOM和事件。

2 个答案:

答案 0 :(得分:1)

是的,您可以这样做,但这通常不是一个好主意。

改用@ViewChild(...)或类似的Angular方法来获取对组件视图中元素的引用。

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

如果您只想使用添加点击处理程序

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

将是更好的方法,但听起来您正在以某种方式动态添加按钮,并且声明性地添加单击处理程序在这种情况下可能不起作用(将需要更多信息)

答案 1 :(得分:0)

编辑: 如果像我这样的人想要使用dart:html而不是angular 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"));
  }
}