2015-06-19 39 views
0

采用了棱角分明的工厂我在一个文件中(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是工厂?我试图导出电影作为一个类,但我不知道如何将工厂转换为TypeScript类。

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

+0

应该看看这个http://stackoverflow.com/a/24058604/2435473 –

+0

我不是要批评,但在这些例子中没有TS的舔。你可能会更好地跟随那个只有JS的教程,然后一旦掌握了角度工程的回归并开始在TS中编写它。此外pankajparkar链接是好的,但更多的TS处理方式实际上是@basarat给这个问题的答案。 –

+0

对不起,不清楚。我正在重写TypeScript中的教程以更好地理解TypeScript。上面的片段是100%的JavaScript,并直接从教程中撕掉。我已经在我的TS文件中重写了它们(尽管很糟糕)。你能举一个例子说明这两个片段如何转换成TypeScript,最好是使用类? – mikeesouth

回答

0

嗯,我还在学习打字稿,我不知道这是否可以帮助任何人,但我通过第一工厂改写到服务解决了上述问题,因为这样的:

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(); 

使用$资源来创建一个新的实体的简化的例子是:

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