这是将第三方库包装为Angular.js服务的正确方法吗?

时间:2014-08-02 16:26:15

标签: angularjs svg

我试图将Snap.svg包装为我的应用程序的服务。下面的代码有效,但这是正确的方法吗?

var svgService = angular.module("svgService", []);

svgService.factory("svgService", [
  function () {
    if (Snap) {
      return Snap;
    }
  }
]);

1 个答案:

答案 0 :(得分:8)

如果if不存在,您的ReferenceError: Snap is not defined支票会抛出Snap错误。

您可以将这样的条件语句替换为安全:

if (typeof Snap !== 'undefined') {

或如果Snap位于window,请直接引用它:

if (window.Snap) {

甚至更好,至少在进行单元测试时,使用内置的$window服务,因为它允许你模拟它。

svgService.factory("svgService", function ($window) {
  // the if check is unnecessary since an undefined
  // is returned anyway when the Snap doesn't exist.
  return $window.Snap; 
});

希望这有帮助。

相关问题