Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS(1.5)依赖注入模型类(typescript)_Angularjs_Dependency Injection_Typescript_Model - Fatal编程技术网

AngularJS(1.5)依赖注入模型类(typescript)

AngularJS(1.5)依赖注入模型类(typescript),angularjs,dependency-injection,typescript,model,Angularjs,Dependency Injection,Typescript,Model,我正在尝试使用typescript构建angularjs(1.5)应用程序 我想创建一个调用模型(可以获取参数)的工厂 如果我使用纯JS,我可以执行以下操作 angular.module('test', []) .factory('Talker', [$q, function($q){ return Talker() function Talker(name) { this.name = name || 'Bobuel Johnson';

我正在尝试使用typescript构建angularjs(1.5)应用程序

我想创建一个调用模型(可以获取参数)的工厂

如果我使用纯JS,我可以执行以下操作

angular.module('test', [])
    .factory('Talker', [$q, function($q){
      return Talker()

      function Talker(name) {
        this.name = name || 'Bobuel Johnson'; 
      }
      Talker.prototype.deferredHello = function(){
        $q.when('Hi, I\'m ' + this.name);
      }
    }])
现在我想在typescript中这样做,这样我就可以拥有Talker类,但我希望能够(在本例中)将$q注入模型类


请你帮我弄清楚如何将此设置为与typescript等效的设置?

我建议使用服务配方,而不是工厂,如果只是为了准备angular2。对js代码的TypeScript重写看起来像这样

类说话者{
公共静态$inject=['$q'];//配置角度di
私有名称:string='sometalker';
构造函数(私有$q){}
公共延迟Hello(){
this.$q.when('Hi,I'm'+this.name));
}
}
角度。模块(“测试”)。服务(“说话者”),说话者;
您可以找到js的翻译

如果绝对需要工厂,您也应该能够这样做:

类说话者{
私有名称:string='sometalker';
构造函数(私有$q){}
公共延迟Hello(){
this.$q.when('Hi,I'm'+this.name));
}
}
角度。模块(“测试”)。服务(“说话者”),功能($q){
返回新的说话者($q);
});
您可以检查生成的javascript

如果您需要创建多个Talker实例,可以这样做

类说话者{
私有名称:string='sometalker';
构造函数(private$q,money:number){}
公共延迟Hello(){
this.$q.when('Hi,I'm'+this.name));
}
}
角度。模块(“测试”)。服务(“说话者”),功能($q){
//如果需要,我们可以要求提供更多参数
返回函数talkerFactory(money){//返回工厂而不是新的talker
返回新的谈话者(q,金钱);
};
});
角度模块('yatest')。服务('Organizer'),功能(Talker){
let talker=talker(42);//将调用talkerFactory并返回talker的新实例
})

例如。

谢谢你的建议!我不确定如何将模型作为服务提供,因为该服务是单例的,我需要模型的几个实例,而且如果我想在实例化时提供参数,Talker模型会有问题。您建议我使用您提到的factory版本,还是有更好的方法?有一种模式用于从服务创建多个实例,您可以使用它,只需返回一个函数,调用该函数时将返回该类的新实例。我还将为此添加一个示例。派对有点晚了,但这个答案应该被标记为有效@timothy.B谢谢你的评论,但如果答案是他的问题的解决方案,那就要看OP了。我希望这对你有帮助。