Tento blog je opuštěn a přežívá pouze záloha. Většina informací zde je nejspíše zastaralých.
Knihovny třetích stran v Angularu
Při stavění Click and Study s Digital Wizards jsem narazil na to, že moje Angular aplikace závisela na hned několika knihovnách 3. strany. Firebase, Facebook SDK, Keen.io, Recurly atd.
Žádná z nich není nutná pro start aplikace, takže nemá smysl je přidávat hned na začátku nebo je mít součástí build procesu. Angular takovou funkci defaultně nemá, takže si musíme vytvořit vlastní službu.
Minimální řešení
Vždycky rád začínám s minimálním řešením/mockem, abych vůbec věděl, jak ho budu používat.
Každou knihovnu budeme chtít načíst pouze jednou, což zajistíme tím, že budeme kontrolovat, jestli už je v okně zaregistrován její globální objekt, načež spustíme callback. Nevyužívám $document, protože neumí createElement a volání přes angular.element se mi moc nelíbil.
Použití je potom přímočaré:
Jenže, pro takovéto asynchronní operace se více hodí promise a Angular služba $q.
Řešení s $q
Předělání na promise je jednoduchá záležitost. Navíc získáme jednodušší error handling a možnost navazovat další větve s konstruktem .then(). Takže je například jednodušší načíst knihovnu, inicializovat a až potom použít.
Což nám umožní knihovny volat takto:
Unit test
Jasmine test pro $q je také skoro přímočará záležitost. Stačí si jen dát pozor na to, že Angular dělá resolve při $rootScope.$apply(); a že zaregistrování onerror chyby potřebuje obalit vyhodnocení do setTimeout()
Tento test také zajistí 100% code coverage v Istanbulu.