AngularJS工厂函数未定义

时间:2015-12-17 08:52:18

标签: angularjs angularjs-factory

我过去3个小时一直在寻找这个问题而且我非常困惑。 apache2错误日志说php脚本正在运行,但是当我调用它时,我的工厂出现了错误。

TypeError: InputUpload.uploadImage(...) is undefined

我没看到当firefox调试器没有定义时,javascript甚至如何运行php脚本......

var app = angular.module("app", ["ui.bootstrap"]);

//http://stackoverflow.com/questions/18571001/file-upload-using-angularjs
app.factory("API", function ($http) {
    return {
    uploadImage: function (image) {
        $http.post('/js/upload_image.php', image);
    }
    }
});

app.controller("MainController", ['$scope', '$http', 'API', function($scope, $http, 'API') {
    $scope.imageUrl = "";

    $scope.template = "";

    $scope.templates = [];

    $scope.templates.push("select an option...");
    $scope.templates.push("MakeGray");
    $scope.templates.push("Canny");

    $scope.template = $scope.templates[0];

    $scope.add = function() {
    alert("HELLO");
    var f = document.getElementById('file').files[0];
    var r = new FileReader();
    r.onloadend = function(e) {
        var data = e.target.result;

        API.uploadImage(data)
        .success(function (imgUrl) {
            $scope.imageUrl = imgUrl;
        })
        .error (function (error) {
        });
    }

    r.readAsBinaryString(f);
    }
});

3 个答案:

答案 0 :(得分:2)

试试这个

    app.controller("MainController", ['$scope', '$http', 'InputUpload', 'API', function($scope, $http, API) {
//your code here..........

答案 1 :(得分:1)

你需要退回$ http承诺:

app.factory("API", function ($http) {
    return {
        uploadImage: function (image) {
           //add return her 
           return $http.post('/js/upload_image.php', image);
        }
    }
});

答案 2 :(得分:0)

您的问题出在控制器注入中。

在您的控制器中将其替换为

.controller("MainController", ['$scope', '$http', 'API', function($scope, $http, API) {

并调用您的函数API.uploadImage(img)