我正在开发的 Angular 应用程序必须从 Angular 读取 Google Analytics ID,然后将其传递给 ga('create', 'UA-XXXXX-Y')
在我的index.html 上的标准JavaScript 中
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID -->
<script>
!function(A,n,g,u,l,a,r){A.GoogleAnalyticsObject=l,A[l]=A[l]||function(){
(A[l].q=A[l].q||[]).push(arguments)},A[l].l=+new Date,a=n.createElement(g),
r=n.getElementsByTagName(g)[0],a.src=u,r.parentNode.insertBefore(a,r)
}(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', $rootScope.googleAnalytics );
// ga('send', 'pageview');
</script>
该应用将服务多个网站,因此 Google Analytics(分析)代码将根据所服务的网站而变化。
代码ga('create', $rootScope.googleAnalytics );
不起作用,抛出 Uncaught ReferenceError: $rootScope is not defined
。
Google Analytics ID 也位于 cookie 中,因此我可以从 JavaScript 中的 cookie 中读取它,但是没有更简单的方法吗?
更新:我已经采取了不将 GA id 放入 $rootScope 中而仅放入 cookie 中并调用 ga('create', gaFromCookie)
的方法。设置cookie后在 Controller 中而不是在index.html上。
最佳答案
您收到的错误是因为此脚本在您的 Angular 应用程序启动之前运行 - 因此我们此时不知道 $rootScope
是什么。您可以在应用初始化后调用 ga()
,或者取决于您定义 $rootScope.googleAnalytics
的时间。观察以下示例,我们在模块 run
阶段调用“普通旧”函数。这可能是调用 ga() 的好地方。观察以下示例...
function init(value) {
ga('create', value);
}
angular.module('app', []).run(function($rootScope) {
$rootScope.googleAnalytics = 'something'
init($rootScope.googleAnalytics);
});
JSFiddle Link - 简单的演示
关于javascript - 如何用普通的旧 JavaScript 读取 Angular 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33259784/