Angular 指令控制器:参数不是函数,未定义
Angular directive controller: Argument is not a function, got undefined
我在我的控制器中创建了一个指令,我想在该指令中包含另一个控制器。我得到的错误是 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 }}
};
});
文档控制器
app.controller('DocumentController', ['$http', '$scope', '$sessionStorage', '$state', '$log', 'Session', 'api', 'components', function ($http, $scope, $sessionStorage, $state, $log, Session, api, components) {
$scope.components = components;
}]);
我对指令很陌生,但是有人知道我做错了什么吗?
在指令定义对象中,controller
属性 需要一个带有函数名称的字符串,或者函数本身(不是脚本文件的路径)。
app.directive('viewDoc', function () {
return {
...
controller: "DocumentController",
};
});
您想按名称调用控制器,而不是按文件名:
controller: "js/controllers/testview/DocumentController.js"
应该是
controller: "DocumentController"
你确定你需要一个指令控制器吗?我认为您要实现的是 link 功能。
您可以使用指令 link 功能,如控制器。
.directive('myDialog', function() {
return {
restrict: 'E',
transclude: true,
scope: {},
templateUrl: 'my-dialog.html',
link: function (scope, element) {
scope.name = 'Jeff';
}
};
});
查看 angular 文档
https://docs.angularjs.org/guide/directive
在指令定义中无法通过其 URL 放置控制器。但是,如果您在 DOM 模板中定义控制器,则可以在指令定义
中使用 controller: 'myController as myCtrl'
我在我的控制器中创建了一个指令,我想在该指令中包含另一个控制器。我得到的错误是 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 }}
};
});
文档控制器
app.controller('DocumentController', ['$http', '$scope', '$sessionStorage', '$state', '$log', 'Session', 'api', 'components', function ($http, $scope, $sessionStorage, $state, $log, Session, api, components) {
$scope.components = components;
}]);
我对指令很陌生,但是有人知道我做错了什么吗?
在指令定义对象中,controller
属性 需要一个带有函数名称的字符串,或者函数本身(不是脚本文件的路径)。
app.directive('viewDoc', function () {
return {
...
controller: "DocumentController",
};
});
您想按名称调用控制器,而不是按文件名:
controller: "js/controllers/testview/DocumentController.js"
应该是
controller: "DocumentController"
你确定你需要一个指令控制器吗?我认为您要实现的是 link 功能。
您可以使用指令 link 功能,如控制器。
.directive('myDialog', function() {
return {
restrict: 'E',
transclude: true,
scope: {},
templateUrl: 'my-dialog.html',
link: function (scope, element) {
scope.name = 'Jeff';
}
};
});
查看 angular 文档 https://docs.angularjs.org/guide/directive
在指令定义中无法通过其 URL 放置控制器。但是,如果您在 DOM 模板中定义控制器,则可以在指令定义
中使用controller: 'myController as myCtrl'