2014-10-27 113 views
0

我倾向Angular我的第一个应用程序是一个照片共享工具。我添加了上传功能的代码并将其破解。我以为我在我的控制器中定义了albumProvider,但显然我没有这样做。错误是错误:[$ injector:unpr]未知提供者。我被卡住了,可以帮我们解决我需要解决的问题。

albumService.js

(function() { 
    function albumProvider($http,$fileUploader) { 
    this.getUploader = function (album_name, scope) { 
     return $fileUploader.create({ 
     scope: scope, 
     method: "PUT", 
     url: "/v1/albums/" + album_name + "/photos.json" 
     }); 
    }; 

    this.getAlbums = function (callback) { 
     $http.get("/v1/albums.json") 
     .success(function (data, status, headers, conf) { 
      callback(null, data); 
     }) 
     .error(function (data, status, headers, conf) { 

      callback(data); 
     }); 
    }; 
    this.getPhotosForAlbum = function (name, callback) { 
     $http.get("/v1/albums/" + name + "/photos.json") 
     .success(function (data, status, headers, conf) { 
      callback(null, data); 
     }) 
     .error(function (data, status, headers, conf) { 
      callback(data); 
     }); 
    }; 

    this.addAlbum = function (album_data, callback) { 

     if (!album_data.name) return callback({ code: "missing_name" }); 
     if (!album_data.title) return callback({ code: "missing_title" }); 
     if (!album_data.description) return callback({ code: "missing_description" }); 
     if (!album_data.date) return callback({ code: "missing_date" }); 
     if (!is_valid_date(album_data.date)) return callback({ code: "bad_date" }); 

     $http.put("/v1/albums.json", album_data) 
     .success(function (data, status, headers, conf) { 
      callback(null, data); 
     }) 
     .error(function (data, status, headers, conf) { 
      callback(data); 
     }); 
    }; 
    } 
    photoApp.service("albumProvider", albumProvider); 
    function is_valid_date(the_date) { 
    if (the_date.match(/^[0-9]{2,4}[\-\/\. ,][0-9]{1,2}[\-\/\. ,][0-9]{1,2}$/)) { 
     var d = new Date(the_date); 
     return !isNaN(d.getTime()); 
    } else { 
     return false; 
    } 
    } 
})(); 

albumUploadController.js

(function() { 
    function AlbumUploadController($scope, $routeParams, albumProvider) {//Dependency Inject albumProvider 
    $scope.album_name = $routeParams.album_name; 
    $scope.page_load_error = ''; 
    $scope.description = {}; 

    albumProvider.getPhotosForAlbum($scope.album_name, function (err, photos) { 
     if (err) { 
     if (err.error == "not_found") 
      $scope.page_load_error = "No such album. Are you calling this right?"; 
     else 
      $scope.page_load_error = "Unexpected error loading page: " + err.code + " " + err.message; 
     } else { 
     $scope.photos = photos; 
     $scope.uploader = albumProvider.getUploader($scope.album_name, $scope); 

     $scope.uploader.bind("completeall", function (event, items) { 
      $scope.done_uploading = true; 
     }); 
     } 
    }); 

    $scope.uploader.bind('beforeupload', function (event, item) { 
     var fn = _fix_filename(item.file.name); 
     var d = item.file.lastModifiedDate; 
     var dstr = d.getFullYear() + "/" + d.getMonth() + "/" + d.getDate(); 

     item.formData = [{ 
     filename: fn, 
     date: dstr, 
     description: $scope.descriptions[item.file.name] 
     }]; 
    }); 
    } 
    photoApp.controller("AlbumUploadController", AlbumUploadController); 

    function _fix_filename(fn) { 
    if (!fn || fn.length == 0) return "unknown"; 

    var r = new RegExp("^[a-zA-Z0-9\\-_,]+$"); 
    var out = ""; 

    for (var i = 0; i < fn.length; i++) { 
     if (r.exec(fn[i]) != null) 
     out += fn[i]; 
    } 
    if (!out) out = "unknown_" + (new Date()).getTime(); 
    } 
})(); 

app.js

var photoApp = angular.module('photoSharingApp', ['ngRoute']); 
photoApp.config(function ($routeProvider) { 
    $routeProvider 
    .when("/albums", { 
     controller: "AlbumListController", 
     templateUrl: "/app/partial/albumPartial.html" 
    }) 
    .when("/album/:album_name", { 
     controller: "AlbumViewController", 
     templateUrl: "/app/partial/albumViewPartial.html" 
    }) 
    .when("/album/:album_name/upload", { 
     controller: "AlbumUploadController", 
     templateUrl: "/app/partial/albumUploadPartial.html" 
    }) 
    .when("/album/photos/:album_name/:photo_filename", { 
     controller: "PhotoViewController", 
     templateUrl: "/app/partial/photoViewPartial.html" 
    }) 
    .when("/", { 
     redirectTo: "/albums" 
    }) 
    .when("/404_page", { 
     controller: "Controller404", 
     templateUrl: "/app/partial/404Partial.html" 
    }) 
    .otherwise({ 
     redirectTo: "/404_page" 
    }); 
}); 
+0

您从哪里得到错误?服务还是控制器?哪个提供者未能注入?如果你缩小你的问题会更好。 – 2014-10-27 15:56:36

+0

@ jack.the.ripper错误:[$ injector:unpr] http://errors.angularjs.org/1.2.26/$injector/unpr?p0=NaNileUploaderProvider%20%3C-%20%24fileUploader%20%3C - %20albumProvider这是我在控制台中看到的。 – user1725382 2014-10-27 16:08:19

+0

好吧,你的错误是在文件上传库,你使用的是哪个版本? – 2014-10-27 16:12:09

回答

0

你需要设置文件上传在喜欢你的应用程序配置:

var photoApp = angular.module('photoSharingApp', ['ngRoute','angularFileUpload']); 

话,据我知道你可能会改变你fileuploader定义:

return new FileUploader({ 
     scope: scope, 
     method: "PUT", 
     url: "/v1/albums/" + album_name + "/photos.json" 
}); 

我不知道的范围传递给服务,但你可以尝试了这一点,也不要忘了将您的依赖关系从$ fileUploader更新到FileUploader

+0

我累了你的代码,但浏览器抛出无法实例化模块photoSharingApp由于: 错误:[$ injector:modulerr] http://errors.angularjs.org/1.2.26/$injector/modulerr?p0= .. )感谢您的建议。 – user1725382 2014-10-28 03:04:36

相关问题