为什么 @ 被 _at_ 代替了? (咖啡脚本)

Why @ replaced with _at_? (CoffeeScript)

我对 Angular 中的 classes 有疑问。 当我尝试为控制器创建一些 class 时,我看到这个错误:

Error: [$injector:unpr] Unknown provider: _at_$scopeProvider <- _at_$scope <- MainController

Class代码:

class MainController
    constructor: (@$scope, @$log) ->
        @timestamp = Date.now() - 900000

angular
    .module 'app'
    .controller 'MainController', MainController

结果我得到了这个:

(function() {
  var MainController;

  MainController = (function() {
    function MainController(_at_$scope, _at_$log) {
      this.$scope = _at_$scope;
      this.$log = _at_$log;
      this.timestamp = Date.now() - 900000;
    }

    return MainController;

  })();

  angular.module('app').controller('MainController', MainController);

}).call(this);

怎么了?

您更新到咖啡版本 1.9。 属性 参数的命名有一个不兼容的变化。看我对的回答,影响你。由于您使用的是angular,因此您可以使用数组符号进行注入。如果你想 minify/uglify 你的代码,无论如何这是唯一正确注入的方法,因此我建议始终这样做。

要么像这样:

class MainController
    constructor: (@$scope, @$log) ->
        @timestamp = Date.now() - 900000

angular
    .module 'app'
    .controller 'MainController', ['$scope', '$log', MainController]

或者像这样:

MainCtrlWithInjects = ['$scope', '$log', 
    class MainController
    constructor: (@$scope, @$log) ->
        @timestamp = Date.now() - 900000
     ]

angular
    .module 'app'
    .controller 'MainController', MainCtrlWithInjects