javascript - angular 2 - 如何为组件包含 javascript?

标签 javascript angular

我是 Angular 的新手,我直接从 Angular 2 开始。Angular 的一大优点是我可以模块化网页的每个功能。组件有自己的 html 和样式表。

但是他们自己的 javascript 文件呢?我怎样才能包含它自己的特定 javascript 文件?我看过这个 SO question唯一可用的方法是使用 SystemJS 吗?

例如,假设一个组件使用 Google Maps API 或一个组件使用图表库,如何处理?

最佳答案

我正在使用如下的 facebook sdk

FacebookService.ts 修改自 https://github.com/zyramedia/ng2-facebook-sdk . FacebookService 文件是部分文件,没有粘贴完整文件

分析 appendFacebook 方法以全局加载外部脚本,但我们在组件需要时调用,一旦加载了外部脚本,我们将不会再次加载它,因为我们正在检查脚本 ID

@Injectable()
export class FacebookService {

    /**
     * This method is used to initialize and setup the SDK.
     * @param params
     */
    init(params: FacebookInitParams): Observable<any> {
        return new Observable(observer => {
            if (!window['fbAsyncInit']) {
                this.appendFacebook();
                window['fbAsyncInit'] = function() {
                    FB.init(params);
                    observer.next('FB initialized');
                    observer.complete();
                };
            } else {
                observer.next('FB initialized');
                observer.complete();
            }
      });

    }

    appendFacebook() {
        var js,
        id = 'facebook-jssdk',
        ref = document.getElementsByTagName('script')[0];

        if (document.getElementById(id)) {
            return;
        }

        js = document.createElement('script');
        js.id = id;
        js.async = true;
        js.src = "//connect.facebook.net/en_US/sdk.js";

        ref.parentNode.insertBefore(js, ref);
    }
}

然后在component.ts文件中

constructor(private facebookService: FacebookService) {}

loginByFacebook() {
    let facebookParams: FacebookInitParams = {
      appId: environment.facebookAppId,
      xfbml: true,
      version: 'v2.7'
    };

    let facebookSubscription = this.facebookService.init(facebookParams).mergeMap(data => {
        return this.facebookService.login({scope: "public_profile,user_friends,email"});
    }).subscribe((response: FacebookLoginResponse) => {
      console.log(response);
    }, error => {
      console.log(error);
    });
}

关于javascript - angular 2 - 如何为组件包含 javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40500073/

相关文章:

javascript - Var 更改后不会更新

angular - "No data available in table"甚至在数据表加载后显示

Angular 国际化插值字符串

javascript - 如何从 jquery 过滤项中删除空格?

javascript - 使用 jQuery 隐藏/删除字符串

javascript - 使用弹出 html 的 Chrome 扩展解决方法

Angular - 找不到错误源,因为堆栈跟踪在生产模式下被混淆了

javascript - 试图在内存游戏中显示图像

Angular 2,动画触发器尚未注册

angular - 复选框在 Angular 4 中无法正确加载