在单独的打字稿文件中使用角度工厂

时间:2015-06-19 18:30:43

标签: angularjs typescript

我在一个文件(Movie.ts)中定义工厂,如下所示:

(function () {
'use strict';

angular
    .module('moviesServices', ['ngResource'])
    .factory('Movie', Movie);

Movie.$inject = ['$resource'];

function Movie($resource) {
    return $resource('/api/movies/:id');
}
})();

然后我尝试在另一个文件(MoviesController.ts)中使用它,请注意它是TypeScript:

function MoviesAddController($scope, $location, Movie) {
    $scope.movie = new Movie();
    $scope.add = function () {
        $scope.movie.$save(function () {
            $location.path('/');
        });
    };
}

TypeScript现在抱怨“new Movie();”错误消息“无法解析符号'电影'。”

如何定义Movie是工厂?我尝试将Movie导出为类,但我不知道如何将工厂转换为TypeScript类。

这适用于JavaScript,示例来自this tutorial

1 个答案:

答案 0 :(得分:0)

好吧,我还在学习TypeScript,但我不知道它是否对任何人有所帮助,但我通过首先将工厂改写为服务来解决上述问题,如下:

export class WebApiService
{
    static $inject = ["$resource"];
    constructor(private $resource: ng.resource.IResourceService)
    {
    }

    public movies()
    {
        return this.$resource("/api/movies/:id");
    }
}
app.service("webApiService", WebApiService);

然后,在控制器中,我使用了这段代码:

var Movie = webApiService.movies();
$scope.movie = new Movie();

使用$ resource创建新实体的简化示例是:

var Movie = $resource("/api/movies/:id");
$scope.movie = new Movie();