Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 这是将第三方库包装为Angular.js服务的正确方法吗?_Angularjs_Svg - Fatal编程技术网

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

Angularjs 这是将第三方库包装为Angular.js服务的正确方法吗?,angularjs,svg,Angularjs,Svg,我正在尝试将Snap.svg包装为我的应用程序的服务。下面的代码可以工作,但这是正确的方法吗 var svgService = angular.module("svgService", []); svgService.factory("svgService", [ function () { if (Snap) { return Snap; } } ]); 如果if检查将抛出ReferenceError:Snap未定义错误,如果Snap不存在 为了安全起见

我正在尝试将Snap.svg包装为我的应用程序的服务。下面的代码可以工作,但这是正确的方法吗

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

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

如果
if
检查将抛出
ReferenceError:Snap未定义
错误,如果
Snap
不存在

为了安全起见,可以这样替换条件语句:

if (typeof Snap !== 'undefined') {
或者,如果
捕捉
位于
窗口
,只需直接引用即可:

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; 
});

希望这能有所帮助。

我不太确定这个回答。if(typeof Snap!==“undefined”){}实际上与if(Snap){}相同;关键是,如果Snap包含错误的值,则两者都不起作用。