在指令的控制器中调用的服务方法运行但是未定义日志

时间:2016-10-04 10:20:35

标签: angularjs angularjs-directive

我有一个指令用于我的一些模板和句柄上传文件,我需要注入处理服务器请求的相关服务。

这是

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(...)未定义

2 个答案:

答案 0 :(得分:1)

在指令函数中注入的依赖项仅在指令链接(preLink& postLink)函数中可用。

如果你想在指令的控制器中projectService,那么你必须注入控制器DI阵列&各自的控制器工厂功能。

controller: ['$scope', '$state', '$stateParams', 'projectService', addFileCtrl]

function addFileCtrl($scope, $state, $stateParams, projectService) {

答案 1 :(得分:0)

问题实际上是我没有在我的服务上退回承诺......

实际上,@ Pankaj帮我排除了问题不在指令本身上。