如何在 Dart lang 中创建全局(在窗口上)对象?

cor*_*ath 6 global-variables dart dart-js-interop

假设我想创建一个名为的全局对象Helloworld在该对象上添加函数,以便浏览器中的任何其他 JavaScript 库都可以简单地调用它window.Hello.world();

如何在 Dart lang 中创建这样的对象,以及如何将其公开/全局放置/放在window对象上?

在纯 JavaScript 中,我将能够编写:

window.Hello = {
  world: function() {
    console.log("Hello World!");
  }
}

window.Hello.world();
Run Code Online (Sandbox Code Playgroud)

但是你如何在 Dart 中做到这一点?

小智 6

我从事 Dart-JS 互操作。这是使用新包:js/js.dart 互操作的最简洁方法。

@JS()
library your_library;

import 'package:js/js.dart';

@anonymous
@JS()
class HelloObject {
  external factory HelloObject({Function world});
  external world();
}

@JS()
external set Hello(HelloObject v);
@JS()
external HelloObject get Hello;

main() {
  Hello = new HelloObject(world: allowInterop(() { print("Hello from dart"); }));

  // You can also call this object from Dart as an added bonus.
  // For example you could call this from Dart or Js.
  /// Hello.world();
}
Run Code Online (Sandbox Code Playgroud)


ten*_*obi 3

我不确定它如何与对象一起工作,但如果您想对方法执行此操作,则非常简单:

import 'dart:js' as js;

main() {
  js.context['methodFromDart'] = doMyStuff;
}

void doMyStuff(String text) => print(text);
Run Code Online (Sandbox Code Playgroud)

然后在你的 Javascript 中你可以自由地做:

methodFromDart("Hello world to Dart!");
Run Code Online (Sandbox Code Playgroud)

您可以尝试找到一种方法来对对象执行类似的操作。

  • 我使用这个解决方案进行调试,它有效,谢谢! (2认同)