【问题标题】:Is this the proper way to wrap a third-party library as an Angular.js service?这是将第三方库包装为 Angular.js 服务的正确方法吗?
【发布时间】:2014-09-25 15:40:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: angularjs svg


    【解决方案1】:

    如果Snap 不存在,您的if 检查将引发ReferenceError: Snap is not defined 错误。

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

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

    或者如果Snapwindow中,直接引用即可:

    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 包含虚假值,则两者都不会执行任何操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    相关资源
    最近更新 更多