Angular指令控制器:Argument不是函数,未定义

时间:2015-03-30 14:23:37

标签: javascript angularjs angularjs-directive

我在我的控制器中创建了一个指令,我希望在指令中包含另一个控制器。我得到的错误是Error: [ng:areq] Argument 'js/controllers/testview/DocumentController.js' is not a function, got undefined

TestviewController

app.controller('TestviewController', ['$http', '$scope', '$sessionStorage', '$state', '$log', 'Session', 'api', function ($http, $scope, $sessionStorage, $state, $log, Session, api) {
    var module_id = $state.params.id;

    $http.get(api.getUrl('componentsByModule', module_id))
        .success(function (response) {
            $scope.components = response;
        });
}]);

app.directive('viewDoc', function () {
    return {
        templateUrl: "tpl/directives/testview/document.html",
        controller: "js/controllers/testview/DocumentController.js",
        resolve: { components: function() { return $scope.components }}
    };
});

DocumentController

app.controller('DocumentController', ['$http', '$scope', '$sessionStorage', '$state', '$log', 'Session', 'api', 'components', function ($http, $scope, $sessionStorage, $state, $log, Session, api, components) {
    $scope.components = components;
}]);

我对指导员很新,但是有人知道我做错了什么吗?

4 个答案:

答案 0 :(得分:3)

在指令定义对象中,controller属性需要一个带有函数名称的字符串,或者函数本身(不是脚本文件的路径)。

app.directive('viewDoc', function () {
    return {
        ...
        controller: "DocumentController",

    };
});

答案 1 :(得分:1)

您希望按名称而不是文件名调用控制器:

controller: "js/controllers/testview/DocumentController.js"

应该是

controller: "DocumentController"

答案 2 :(得分:1)

没有选项可以将控制器的URL放在指令定义中。但是,如果在DOM模板中定义控制器,则可以在指令定义中使用controller: 'myController as myCtrl'

答案 3 :(得分:0)

你确定需要指令控制器吗?我认为你想要实现的是链接功能。

您可以使用指令链接功能,如控制器。

.directive('myDialog', function() {
  return {
   restrict: 'E',
transclude: true,
scope: {},
templateUrl: 'my-dialog.html',
link: function (scope, element) {
  scope.name = 'Jeff';
}
  };
});

看看角文档 https://docs.angularjs.org/guide/directive