基本上,我正在尝试找到一种在Angular中使用Adobe DTM高效激活标签的方法,而无需更改页面。我们有一个特别长的高程周期,因此必须向页面添加_satelitte.track()
才能获取新标记,这将严重限制使用DTM的好处。我主要担心的是,如果我只想在某些情况下触发标签,那么我将无法使用已有的规则。
我相信_satellite.pageBottom()
告诉卫星对象发生了页面加载。我试图在路由改变的任何时候调用_satellite.pageBottom()来模仿页面加载。
.config(function($routeProvider, $httpProvider){
$routeProvider.when('/one', {
templateUrl: 'view1.html',
controller: 'Data1Controller'
}).when('/two', {
templateUrl: 'view2.html',
controller: 'Data2Controller'
}).when('/three', {
templateUrl: 'view1.html',
controller: 'Data3Controller'
}).when('/four', {
templateUrl: 'view2.html',
controller: 'Data4Controller'
}).when('/five', {
templateUrl: 'form.html',
controller: 'FormController'
}).otherwise({
controller: "Default",
templateUrl: 'default.html'
});
$httpProvider.interceptors.push('CacheBusterInterceptor');
}).run(function($rootScope){
$rootScope.$on('$routeChangeStart', function(){
_satellite.pageBottom();
});
});
在我想要模拟页面加载的其他情况下这对我来说效果很好但是它不能用_satellite.pageBottom()
调用而且我不知道如何在不使用它的情况下让DTM在Angular中工作直接通话规则。有关获得这种方式工作或其他工作的任何建议,必须对页面上的代码进行更改吗?
谢谢, 麦克
答案 0 :(得分:3)
我使用了通用_satellite.track(' pageLoad')直接调用规则来解决单页应用挑战。您不必以这种方式更改页面代码。只要DTM可以访问您需要的变量,您就可以在标记管理器中运行所有逻辑。
编辑动态直接呼叫规则:
$rootScope.$on('$routeChangeSuccess',function(e, curr, pre){
_satellite.track(current.$$route.originalPath);
})
或者如果要在$ routeProvider配置中添加页面名称:
$routeProvider.when('/',{pageName:'Fantastic Home Page',controller:...,templateUrl:...}
$rootScope.$on('$routeChangeSuccess',function(e, curr, pre){
_satellite.track(current.pageName || 'whoops no pageName');
})
答案 1 :(得分:1)
Adobe DTM允许基于popstate或hashtag更改触发规则。最好的方法是根据这些事件设置规则,如果您的应用支持深层链接,那么还可以根据深层链接网址设置页面加载规则。