我有三个服务和一个组件:
$.ajax({
type: 'POST',
url: path,
cache: false,
data: postData,
dataType: 'json', //<-----add this here
success: function(result) {
for (o in result) { // <----and just use this way
console.info(o.city);
}
},
error: function(e) {
$("#sys_msg").html(e);
$("#myModal").modal({
show: true,
backdrop: false,
keyboard: true
});
}
});
root.service
abstarct-child.service
extend-child.service
使用依赖注入app.component
注入root.service
,如下所示:
abstarct-child.service
import {Injectable} from 'angular2/core';
import {AbstractChildService} from './abstarct-child.service';
@Injectable()
export class RootService {
constructor(private _abstractChildService: AbstractChildService) {}
UseChildServiceDoSomethingFunction(){}
}
看起来像这样:
abstarct-child.service
import {Injectable} from 'angular2/core';
@Injectable()
export abstract class AbstractChildService {
abstract doSomething(): any ;
}
看起来像这样:
extend-child.service
import {Injectable} from 'angular2/core';
import {AbstractChildService} from './abstarct-child.service';
@Injectable()
export class ExtendChildService extends AbstractChildService{
constructor(private _num: number) { super(); }
doSomething() : any { return true; }
}
提供app.component
和root.service
extend-child.service
,如下所示:
abstract-child.service
我想知道如何向import {Component} from 'angular2/core';
import {Input} from 'angular2/core';
import {provide} from 'angular2/core';
import {RootService} from './root.service';
import {AbstractChildService} from './abstarct-child.service';
import {ExtendChildService} from './extend-child.service';
@Component({
selector: 'app',
providers: [provide(AbstractChildService, { useClass: ExtendChildService, useValue: this.num})]
})
export class AppComponent {
@Input('given_Num') num: number;
}
对象注入,在这种情况下是extend-child.service
的{{1}}?
有人能找到我做错的事吗?
感谢。
答案 0 :(得分:2)
我还没有完全弄明白你想要完成什么,但是
provide(AbstractChildService, {
useClass: ExtendChildService,
useValue: this.num})
不是有效的提供者。
您不能在一个提供商中拥有useClass
和 useValue
参数,一次只能有一个。
您也无法在this.
装饰器中的提供程序中使用@Component()
。在评估装饰器时,还没有this.
可以引用的组件实例。
如果您想提供一个号码,可以使用字符串或OpaqueToken
provide('MyNumber', {useValue: 10}),
并通过
注入constructor(@Inject('MyNumber') private _num: number) { super(); }
另一种方法是使用工厂
provide(ExtendedChildService, {useFactory: () => { new ExtendedChildService(10)});
但仍然无法引用this.
。