'ShouldWorkController'不是一个函数。未定义

时间:2015-01-04 10:46:45

标签: javascript angularjs typescript angular-ui-router

当我尝试使用angular-ui-router $ stateProvider将控制器绑定到模板时,我遇到以下错误:

'ShouldWorkController' is not a function. Got undefined.

但是,当我使用ng-controller在模板中声明控制器时,一切正常。这可能有什么问题?

app.ts

module App {

    var dependencies = [
        MyControllers            
    ]

    function configuration($stateProvider: ng.ui.IStateProvider) {

        $stateProvider
            .state("shouldWork", {
                url: "/shouldWork",
                templateUrl: "app/shouldWork.html"
                controller: "ShouldWorkController" // does not work
           });
    }
}

shouldWorkController.ts

module App.MyControllers {

    interface IShouldWorkViewModel {

    }

    class ShouldWorkController implements IShouldWorkViewModel {}

}

ShouldWork.html

<div ng-controller="ShouldWorkController as viewModel" us-spinner spinner-key="spinner-1">
                 ^ --- this works nicely

2 个答案:

答案 0 :(得分:2)

该消息表示,主角模块中未加载此类控制器 "ShouldWorkController"。请务必在最后调用注册:

module App.MyControllers {    
    ...
    class ShouldWorkController implements IShouldWorkViewModel {}    
}

// we have to register this controller into some module (MyControllers)
// which is also referenced in the main app module
angular.module('MyControllers')
    .controller('ShouldWorkController', App.MyControllers.ShouldWorkController ); 

答案 1 :(得分:0)

我意识到这已经过时了,但我是通过谷歌来到这里同样的问题,而不是第一次。要检查的内容包括:

  1. 您的控制器类的导出语句。从您发布的代码中我发现您缺少export类的ShouldWorkController语句。在您的情况下,这可能不是问题,但您应该检查它。我可以通过从控制器类中删除export语句来重现此错误。
  2. 检查您的HTML模板是否存在(如果使用UI-Router)。如UI-Router文档中所述:&#34;如果未定义模板,则不会实例化控制器。&# 34;
  3. 在与控制器相同的文件中注册您的控制器。有些教程会演示在模块文件中注册的控制器。虽然这确实有效,但我个人发现它比在控制器文件中直接注册控制器更容易出错。
  4. 检查您的打字稿参考。确保将打字稿引用(例如///<reference path="../app/services/shouldWorkService.ts">)添加到包含您引用的任何类型的打字稿文件
  5. 检查控制器的名称是否与$ stateProvider配置中声明的名称匹配。