2015-02-10 2 views
0

У меня проблема с классами в Angular. Когда я пытаюсь создать некоторый класс для контроллера, я вижу эту ошибку:Почему @ заменен _at_? (CoffeeScript)

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

Кодекс класса:

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

Вы обновили версию для кофе 1.9. Существует несовместимое изменение в именах аргументов свойств. См. Мой ответ this other question, он влияет на вас. Поскольку вы используете угловой, вы можете использовать нотацию массива для инъекций. Если вы хотите минимизировать/убрать свой код, это единственный способ получить право на инъекцию в любом случае, поэтому я бы рекомендовал всегда делать это так.

Либо так:

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 
Смежные вопросы