【问题标题】:Using angular factory in separate typescript file在单独的打字稿文件中使用角度工厂
【发布时间】:2015-09-05 20:11:27
【问题描述】:

我在一个文件 (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

【问题讨论】:

  • 我不是要批评,但在这些例子中没有一点 TS 的意思。您最好只使用 JS 来学习该教程,然后一旦您掌握了 Angular 的工作原理,然后开始在 TS 中编写它。 pankajparkar 链接也很好,但更多的 TS 处理方式实际上是@basarat 对这个问题的回答。
  • 抱歉不清楚。我正在用 TypeScript 重写教程,以更好地理解 TypeScript。上面的 sn-ps 是 100% JavaScript,直接从教程中提取。我已经在我的 TS 文件中重写了它们(虽然可能很糟糕)。你能举个例子说明如何将两个 sn-ps 转换为 TypeScript,最好使用类吗?

标签: angularjs typescript


【解决方案1】:

好吧,我还在学习 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();

【讨论】:

    猜你喜欢
    • 2016-03-18
    • 2016-03-23
    • 1970-01-01
    • 2022-09-23
    • 2020-01-03
    • 1970-01-01
    • 2013-08-16
    • 2018-11-13
    • 1970-01-01
    相关资源
    最近更新 更多