简体   繁体   English

如何将mixpanel与angular2整合

[英]How to integrate mixpanel with angular2

In index.html I have added mixpanel code from https://mixpanel.com/help/reference/javascript . 在index.html中,我添加了https://mixpanel.com/help/reference/javascript中的 mixpanel代码。

In my 在我的

export class MixpanelService {

  constructor() {
    mixpanel.init("sdfsdf", '', "development");
  }

  public track() {
    mixpanel.track('click', {pageName:'login'})
  }
}

Getting the following error: 收到以下错误:

Cannot find name 'mixpanel'.
   mixpanel.init("sdfsdf", '', "development");

Can somebody help me on this. 有人可以帮我这个。

  • Install the Typings at global level which will help us to install the definations of the JS library. 在全局级别安装Typings将帮助我们安装JS库的定义。 npm install -g typings npm install -g typings
  • Install the mixpaneljs npm install mixpanel --save-dev 安装mixpaneljs npm install mixpanel --save-dev
  • run the below command to create the typing defincation into typings.json 运行以下命令,在typings.json中创建输入defincation
    typings install dt~mixpanel --save --global typings安装dt~mixpanel --save --global

In your mixpanelService.ts file 在您的mixpanelService.ts文件中

import * as Mixpanel from "mixpanel";

this.mixpanel = Mixpanel.default.init(token, properties);

First, install mixpanel for browser . 首先, 为浏览器安装mixpanel。 This is important. 这个很重要。

npm install --save mixpanel-browser

Install the corresponding typings: 安装相应的类型:

npm install --save @types/mixpanel

And add your trackingscript to index.html without mixpanel.init() : 并将您的trackingscript添加到index.html 而不使用 mixpanel.init()

<!-- start Mixpanel -->
<script type="text/javascript">
    (function(e,b){if(!b.__SV){var a,f,i,g;window.mixpanel=b;b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable time_event track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.union people.track_charge people.clear_charges people.delete_user".split(" ");
    for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2;a=e.createElement("script");a.type="text/javascript";a.async=!0;a.src="undefined"!==typeof MIXPANEL_CUSTOM_LIB_URL?MIXPANEL_CUSTOM_LIB_URL:"file:"===e.location.protocol&&"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js".match(/^\/\//)?"https://cdn.mxpnl.com/libs/mixpanel-2-latest.min.js":"//cdn.mxpnl.com/libs/mixpanel-2-latest.min.js";f=e.getElementsByTagName("script")[0];f.parentNode.insertBefore(a,f)}})(document,window.mixpanel||[]);
</script>
<!-- end Mixpanel -->

I highly Recommend creating your own service, which can be very simple: 我强烈建议您创建自己的服务,这可能非常简单:

import { Injectable } from '@angular/core';
import * as mixpanel from 'mixpanel-browser';

@Injectable({
  providedIn: 'root'
})
export class MixpanelService {

  /**
   * Initialize mixpanel.
   *
   * @param {string} userToken
   * @memberof MixpanelService
   */
  init(userToken: string): void {
    mixpanel.init('your-project-token');
    mixpanel.identify(userToken);
  }

  /**
   * Push new action to mixpanel.
   *
   * @param {string} id Name of the action to track.
   * @param {*} [action={}] Actions object with custom properties.
   * @memberof MixpanelService
   */
  track(id: string, action: any = {}): void {
    mixpanel.track(id, action);
  }
}

Note, I call the init() function from my userAuthService, but you can do whatever you want. 注意,我从userAuthService调用init()函数,但你可以做任何你想做的事情。 Just make sure the init() is called before you start tracking. 只需确保在开始跟踪之前调用init()

Then, from the rest of your code, you can use: 然后,从其余代码中,您可以使用:

constructor(private mixpanelService: MixpanelService) { }

someFunction() {
  this.mixpanelService.track('Some action', {
    customPropertyOne: 'customValueOne',
    customPropertyTwo: 'customValueTwo'
  });
}

You have to include the mixpanel script in your index.html, but omit the 您必须在index.html中包含mixpanel脚本,但省略

mixpanel.init('token').

Then in main.ts o app.component.ts you can declare the mixpanel library as variable: 然后在main.ts o app.component.ts中,您可以将mixpanel库声明为变量:

import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
declare const mixpanel: any;

if (environment.production) {
  enableProdMode();
}

mixpanel.init(environment.mixpanel.apikey);
platformBrowserDynamic().bootstrapModule(AppModule);

I use multiple Mixpanel projects to avoid mixing up the dev data with prod data. 我使用多个Mixpanel项目来避免将dev数据与prod数据混淆。

Another one good option is angulartics2 . 另一个不错的选择是angulartics2 It supports MixPanel and other tracking services. 它支持MixPanel和其他跟踪服务。

Hopefully this works. 希望这有效。

If you are following the instructions provided by the Mixpanel.com page, you should paste the big snippet into your index.html of your aplication in between the "Head" tags. 如果您按照Mixpanel.com页面提供的说明进行操作,则应将大代码段粘贴到“Head”标记之间的aplication的index.html中。

Now, double check that the last part of the script, the mixpanel.init("TOKEN"); 现在,仔细检查脚本的最后一部分mixpanel.init(“TOKEN”); is replaced by the one you have in your project. 被项目中的替换。 Make sure of this by clicking in the gear icon (In the report or <> page of Mixpanel) then click the tab "Management" and copy-paste the code of "Token" and then replace it from the one you copied in the index.html. 通过单击齿轮图标(在Mixpanel的报告或<>页面中)确保这一点,然后单击“管理”选项卡并复制粘贴“令牌”代码,然后将其替换为您在索引中复制的代码html的。 If you are not the owner of the project, you can click on "Invite people" in the same location and then follow the same procedure. 如果您不是项目的所有者,可以在同一位置单击“邀请人员”,然后按照相同的步骤操作。

Now, to track something, lets say, every time someone enters the landing page, you can paste this code: 现在,为了跟踪某些内容,比方说,每当有人进入目标网页时,您都可以粘贴以下代码:

    <script type="text/javascript">
     mixpanel.track("Page Loaded", { "Page Name": "Landing Page"});
    </script>

Between your "Body" tags. 在你的“身体”标签之间。

Save all changes, load the web app (npm start / npm run / ng serve if you will) and then go (or reload) the mixpanel.com page, click on the live view tab and there should be happening the magic. 保存所有更改,加载Web应用程序(npm start / npm run / ng serve),然后转到(或重新加载)mixpanel.com页面,单击实时视图选项卡,应该发生魔术。

Hope that works! 希望有效!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM