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

Mic*_* P. 5 svg angularjs

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

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

svgService.factory("svgService", [
  function () {
    if (Snap) {
      return Snap;
    }
  }
]);
Run Code Online (Sandbox Code Playgroud)

run*_*arm 8

如果不存在,您的if检查会抛出ReferenceError: Snap is not defined错误Snap.

你可以像这样替换条件语句是安全的:

if (typeof Snap !== 'undefined') {
Run Code Online (Sandbox Code Playgroud)

或者如果Snapwindow,请直接引用它:

if (window.Snap) {
Run Code Online (Sandbox Code Playgroud)

甚至更好,至少在进行单元测试时,使用内置$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; 
});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我对这种反应不太确定.if(typeof Snap!=="undefined"){}几乎与if(Snap){}相同; 关键是如果Snap包含假值,则两者都不起作用. (2认同)