$ log匿名函数angular js无法正常工作

时间:2017-06-10 04:11:36

标签: javascript angularjs anonymous-function webtorrent

当我尝试在webtorrent的函数中记录一些数据时,我遇到了问题。

我想记录一些 this.client.add 的值,但我没有权限。

了解这里发生了什么?

    import Webtorrent from 'webtorrent';

    class PlaylistController {
      /** @ngInject */
      constructor($http, $log) {
        this.log = $log;
        this.client = new Webtorrent();

        $http
          .get('app/playlist/playlist.json')
          .then(response => {
            this.Torrent = response.data;
          });
      }

      addTorrent(magnetUri) {
        this.log.log(magnetUri);

        this.client.add(magnetUri, function (torrent) {
          // Got torrent metadata!
          this.log.log('Client is downloading:', torrent.infoHash);

          torrent.files.forEach(file => {
            this.log(file);
          });
        });
        this.log.log('sda');
        this.log.log(this.client);
      }
    }

    export const playlist = {
      templateUrl: "app/playlist/playlist.html",
      controller: PlaylistController,
      bindings: {
        playlist: '<'
      }
    };

Here is the output of the console

另外一件事,我使用yeoman作为我的应用程序的脚手架,它有禁止使用console.log的JSLint,它说你必须使用angular。$ log,但是我不想改变它,我想在这里理解这个问题。

1 个答案:

答案 0 :(得分:0)

您需要将此(类)引用为在函数(torrent)函数内使用的另一个变量或使用箭头函数,以便此引用仍然是第一类。

解决方案1,使用另一个变量来引用类:

addTorrent(magnetUri) {
    this.log.log(magnetUri);

    var that = this;

    this.client.add(magnetUri, function (torrent) {
      // Got torrent metadata!
      that.log.log('Client is downloading:', torrent.infoHash);

      torrent.files.forEach(file => {
        that.log(file);
      });
    });
    this.log.log('sda');
    this.log.log(this.client);
  }

解决方案2,使用箭头功能:

addTorrent(magnetUri) {
    this.log.log(magnetUri);

    this.client.add(magnetUri, torrent => {
      // Got torrent metadata!
      this.log.log('Client is downloading:', torrent.infoHash);

      torrent.files.forEach(file => {
        this.log(file);
      });
    });
    this.log.log('sda');
    this.log.log(this.client);
  }