如何创建一个实用程序类,需要在使用之前加载资源,以AngularDart方式?

时间:2014-03-20 20:49:40

标签: dart angular-dart

我创建了常规的Dart实用程序类SoundLibrary,我想制作更多AngularDart' ish。实用程序类可用于加载一些声音文件,然后播放部分文件。

用于获取声音文件的(异步)方法是:

Future<Null> fetchAudioFiles(List<String> audioFiles) { ... }

用于播放其中一个检索到的声音的指定部分的方法是:

playSound(String audioFile, double startTime, double duration) { ... }

一个简单的用例是:

main() {
    SoundLibrary sb = new SoundLibrary();
    sb.fetchAudioFiles(["explosions.mp3", "engines.mp3"]).then((_){
        sb.playSounds("explosions.mp3", 5.34, 2.1);
    });
}

我希望AngularDart创建一个&#34;服务实例&#34;这个类,我可以注入其他实例。在AngularDart实际启动我的应用程序之前,我还希望AngularDart 等待以使实例完全就绪(所有声音都已加载)(因为我不希望在播放给定声音时出现延迟文件第一次)。

我如何以AngularDart方式实现这一目标,因此AngularDart PRELOADs声音,而AngularDart本身初始化。类似于:AngularDart初始化时也会调用soundLibrary.fetchAudioFiles(..)。然后等待AngularDart初始化并加载所有声音。初始化完成后,我希望所有已经注入SoundLibrary的控制器可以调用sb.playsound(..)而不用担心,声音尚未完成加载。

2 个答案:

答案 0 :(得分:1)

只需将ngBootstrap()来电置于fetchAudioFiles() then()来电:

main() {
  SoundLibrary sb = new SoundLibrary();
  sb.fetchAudioFiles(["explosions.mp3", "engines.mp3"]).then((_){
    ngBootstrap(module : new myModule());
  }); 
}

您还可以尝试使用值注册SoundLibrary:

class myModule extends Module {
   value(SoundLibrary, new SoundLibrary()
                         ..fetchAudioFilesSync(["explosions.mp3", "engines.mp3"]));
}

fetchAudioFilesSync是同步操作。

答案 1 :(得分:0)

您只需创建一个类并在模块中注册它

type(SoundLibrary);

将其注入控制器/组件/指令

class MyController {
  SoundLibrary _sl;
  MyController(this._sl) {
    _sl.fetchAudioFiles().then(sb.playSound('explosions.mp3', 5.34, 2.1);
  }
}

要详细说明,您需要提供更多信息 在调用方法并等待它返回之前,没有多少AngularDartish。