Angular 当函数在外部JavaScript库中定义时,如何检查未定义?(第4/5节)

Angular 当函数在外部JavaScript库中定义时,如何检查未定义?(第4/5节),angular,Angular,在Angular 4中,我使用Google Analytics,我有一个常见错误“ga未定义”。 这个问题不是针对谷歌分析的,第三方JavaScript库可以是一切,CanvasJS,PayPal 只有当我过早地使用它(例如在ngInit中)时才会抛出错误,当我在某个事件的函数上调用它时就可以了 HTML页面 我试过: ga&&ga(“发送”、“事件”、…) if(ga!==未定义)ga(“发送”、“事件”、…) 浏览器中仍然存在嘈杂的JavaScript错误 使用try{ga(“send

在Angular 4中,我使用Google Analytics,我有一个常见错误“ga未定义”。
这个问题不是针对谷歌分析的,第三方JavaScript库可以是一切,CanvasJS,PayPal

只有当我过早地使用它(例如在ngInit中)时才会抛出错误,当我在某个事件的函数上调用它时就可以了

HTML页面

我试过:

  • ga&&ga(“发送”、“事件”、…)
  • if(ga!==未定义)ga(“发送”、“事件”、…)
浏览器中仍然存在嘈杂的JavaScript错误

使用
try{ga(“send”,“event”,…)}catch(error){}
我可以隐藏错误,但我更喜欢正确的检查。
我也不想从JavaScrit负载中删除“async”

如何检查是否定义了ga(或任何外部库)


解决了的 正如@Hien Nguyen所建议的:

// when called from ngInit "ga" is still not defined
if(typeof ga === "function") 
    ga('send', 'event', ...)

您可以检查ga的类型==='function'

@Component({...})
export class HomePageComponent implements OnInit {
  name = 'Angular';
  ga: Function;
  ngOnInit() {
    if (typeof this.ga === 'function') {
      this.ga("send", "event", "");
    }
  }
}

在控制台中毫无例外地演示

在HTML页面中,首先声明analytics.js,然后声明其余代码

<script async src='https://www.google-analytics.com/analytics.js'></script>
<script>
window.ga = window.ga || function () { (ga.q = ga.q || []).push(arguments) }; ga.l = +new Date;
    ga('create', 'UA-......', 'auto');
    ga('send', 'pageview', "home");
</script>

window.ga=window.ga | |函数(){(ga.q=ga.q | |[]).push(参数)};ga.l=+新日期;
ga(“创建”、“UA-……”和“自动”);
ga(“发送”、“页面浏览”、“主页”);
async加载了它的可能副本(我没有理由更改它),因此我认为它无法工作(我甚至没有尝试)。
@Component({...})
export class HomePageComponent implements OnInit {
  name = 'Angular';
  ga: Function;
  ngOnInit() {
    if (typeof this.ga === 'function') {
      this.ga("send", "event", "");
    }
  }
}
<script async src='https://www.google-analytics.com/analytics.js'></script>
<script>
window.ga = window.ga || function () { (ga.q = ga.q || []).push(arguments) }; ga.l = +new Date;
    ga('create', 'UA-......', 'auto');
    ga('send', 'pageview', "home");
</script>