如何在普通的JavaScript中读取Angular表达式

How to read an Angular expression in plain old JavaScript

本文关键字:读取 Angular 表达式 JavaScript      更新时间:2023-09-26

我正在工作的Angular应用程序必须从Angular中读取Google Analytics ID,以便在我的index.html

上以标准JavaScript将其传递给ga('create', 'UA-XXXXX-Y')
<!-- 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>

该应用程序将服务于多个网站,因此谷歌分析代码将根据所服务的网站进行更改。

代码ga('create', $rootScope.googleAnalytics );不工作,抛出Uncaught ReferenceError: $rootScope is not defined

谷歌分析ID也在一个cookie,所以我可以从cookie在我的JavaScript中读取它,但不是有一个更简单的方法来做到这一点?

更新:我已经走了不在$rootScope中放置GA id的路线,但仅在cookie中,并在cookie设置后在控制器中调用ga('create', gaFromCookie),而不是在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链接-简单演示