我有一个指令用于我的一些模板和句柄上传文件,我需要注入处理服务器请求的相关服务。
这是
angular.module("app")
.directive('addFile', ['projectService', addFile]);
function addFile(projectService) {
return {
restrict: 'E',
require: '^ngModel',
scope: {
ngModel: '@'
},
templateUrl: 'templates/add_file_form.html',
controller: ['$scope', '$state', '$stateParams', addFileCtrl]
}
function addFileCtrl($scope, $state, $stateParams) {
$scope.upload = {
//Some other properties
post: function () {
if ($scope.upload.selectedOption.type == 0) {
projectService.uploadFile($scope.upload.file, $stateParams.projectId).then(success, fail);
function success(res) {
console.log("Uploaded file with success");
$state.reload();
};
function fail(res) {
console.log("Failed to upload file");
console.log(res);
};
} else {
projectService.uploadLink($scope.upload.link, $stateParams.projectId).then(success, fail);
function success(res) {
console.log("Uploaded file with success");
$state.reload();
};
function fail(res) {
console.log("Failed to upload file");
console.log(res);
};
}
}
}
}
}
问题是即使来自projectService的请求成功完成,我的日志也会说,并且最终不会调用成功函数:
错误:projectService.uploadLink(...)未定义
答案 0 :(得分:1)
在指令函数中注入的依赖项仅在指令链接(preLink& postLink)函数中可用。
如果你想在指令的控制器中projectService
,那么你必须注入控制器DI阵列&各自的控制器工厂功能。
controller: ['$scope', '$state', '$stateParams', 'projectService', addFileCtrl]
和
function addFileCtrl($scope, $state, $stateParams, projectService) {
答案 1 :(得分:0)
问题实际上是我没有在我的服务上退回承诺......
实际上,@ Pankaj帮我排除了问题不在指令本身上。