当前位置:  开发笔记 > 编程语言 > 正文

如何在Typescript中为Angular2编写console.log包装器?

如何解决《如何在Typescript中为Angular2编写console.log包装器?》经验,为你挑选了2个好方法。

有没有办法编写一个全局自制的mylogger函数,我可以在Angular2 typescript项目中使用我的服务或组件而不是console.log函数?

我想要的结果是这样的:

mylogger.ts

function mylogger(msg){
    console.log(msg);
};

user.service.ts

import 'commons/mylogger';
export class UserService{
  loadUserData(){
    mylogger('About to get something');
    return 'something';
  };
};

Zyzle.. 16

您可以将其编写为服务,然后使用依赖注入使该类可用于您的组件.

import {Injectable, provide} from 'angular2/core';

// do whatever you want for logging here, add methods for log levels etc.
@Injectable()
export class MyLogger {

  public log(logMsg:string) {
    console.log(logMsg); 
  }
}

export var LOGGING_PROVIDERS:Provider[] = [
      provide(MyLogger, {useClass: MyLogger}),
    ];

您需要将它添加到应用程序的数组中,将它放在应用程序的顶级注入器中bootstrap.

import {LOGGING_PROVIDERS} from './mylogger';

bootstrap(App, [LOGGING_PROVIDERS])
  .catch(err => console.error(err));

这里有一个非常简单的例子:http://plnkr.co/edit/7qnBU2HFAGgGxkULuZCz?p = preview



1> Zyzle..:

您可以将其编写为服务,然后使用依赖注入使该类可用于您的组件.

import {Injectable, provide} from 'angular2/core';

// do whatever you want for logging here, add methods for log levels etc.
@Injectable()
export class MyLogger {

  public log(logMsg:string) {
    console.log(logMsg); 
  }
}

export var LOGGING_PROVIDERS:Provider[] = [
      provide(MyLogger, {useClass: MyLogger}),
    ];

您需要将它添加到应用程序的数组中,将它放在应用程序的顶级注入器中bootstrap.

import {LOGGING_PROVIDERS} from './mylogger';

bootstrap(App, [LOGGING_PROVIDERS])
  .catch(err => console.error(err));

这里有一个非常简单的例子:http://plnkr.co/edit/7qnBU2HFAGgGxkULuZCz?p = preview


我这个回答看到的唯一的问题是,在控制台,你会看到`MyLogger`记录的消息传来,而不是从您登录时的类来.请参阅[我的回答](http://stackoverflow.com/a/38359235/3400198)以了解如何解决此问题.

2> Francisco C...:

接受的答案给出的示例将打印来自logger类的日志MyLogger,而不是来自实际日志记录的类.

我修改了提供的示例,以便从调用的确切行中打印日志MyLogger.log(),例如:

get debug() {
    return console.debug.bind(console);
}
get log() {
    return console.log.bind(console);
}

我在这里找到了如何做到这一点:https://github.com/angular/angular/issues/5458

Plunker:http://plnkr.co/edit/0ldN08?p = preview

根据developers.mozilla中的文档,

The bind() method creates a new function that, when called, has its
this keyword set to the provided value, with a given sequence of 
arguments preceding any provided when the new function is called.

有关bind此处的更多信息:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有