Angular 2服务方法调用-self.context.dummySer.foo不是函数
我试图从组件调用服务方法,但我一直遇到这样的错误:self.context.dummySer.foo不是函数 更新: 由于解决方案适用于其他组件,但不适用于此组件,而且没有任何意义,因此我将复制粘贴真正的“不工作组件”和服务Angular 2服务方法调用-self.context.dummySer.foo不是函数,angular,angular2-services,Angular,Angular2 Services,我试图从组件调用服务方法,但我一直遇到这样的错误:self.context.dummySer.foo不是函数 更新: 由于解决方案适用于其他组件,但不适用于此组件,而且没有任何意义,因此我将复制粘贴真正的“不工作组件”和服务 import { Component, OnInit, OnDestroy} from '@angular/core'; ...stuff import { UrlifyService } from '../services/urlify.service'; @Compo
import { Component, OnInit, OnDestroy} from '@angular/core';
...stuff
import { UrlifyService } from '../services/urlify.service';
@Component({
selector: 'app-editar-noticias',
templateUrl: 'editar-noticias.component.html'
})
export class EditarNoticiasComponent implements OnInit, OnDestroy{
...stuff
constructor(
...stuff
public urlifySer: UrlifyService) {}
ngOnInit(){
...stuff
}
ngOnDestroy(){
...stuff
}
...other methods
public urlify(titulo:string){
this.urlifySer.urlify(titulo);
}
}
视图:
服务:
import { Injectable } from '@angular/core';
@Injectable()
export class UrlifyService {
urlified: string;
constructor() { }
urlify(str) {
str = str.replace(/^\s+|\s+$/g, '');
str = str.toLowerCase();
let from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;";
let to = "aaaaeeeeiiiioooouuuunc------";
for (let i=0, l=from.length ; i<l ; i++) {
str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
}
str = str.replace(/[^a-z0-9 -]/g, '')
.replace(/\s+/g, '-')
.replace(/-+/g, '-');
this.urlified = str;
}
}
从'@angular/core'导入{Injectable};
@可注射()
导出类服务{
URLIZED:字符串;
构造函数(){}
urlify(str){
str=str.replace(/^\s+|\s+$/g');
str=str.toLowerCase();
let from=“ááäèèèèèèèèèèèèèèèèè;
让to=“aaaaeeiiiioouunc------”;
对于(让i=0,l=from.length;i从HTML绑定直接调用服务被认为是一种不好的做法,您更愿意使用组件中的方法来处理此调用。顺便说一句,它将解决您的问题
您的代码将变成:
@Component({
selector: 'whatever',
templateUrl: 'whatever.html'
})
export class whateverComponent {
constructor(public dummySer: DummyService) {}
public dummyMethod(text: string) {
this.dummySer.foo(text);
}
}
在html中,您将调用dummyMethod而不是服务
另外,我注意到它们在您的组件中不是任何导出类,您只是删除了它以向我们展示您的代码还是原始代码?错误也可能在那里。从HTML绑定直接调用服务被认为是一种不好的做法,您更愿意使用组件中的方法来处理此调用。顺便说一句,它会的,解决你的问题
您的代码将变成:
@Component({
selector: 'whatever',
templateUrl: 'whatever.html'
})
export class whateverComponent {
constructor(public dummySer: DummyService) {}
public dummyMethod(text: string) {
this.dummySer.foo(text);
}
}
在html中,您将调用dummyMethod而不是服务
另外,我注意到它们在您的组件中不是任何导出类,您是删除它来向我们展示您的代码还是原始代码?错误也可能在那里。正如Sakuto answer中提到的,在组件中定义方法将完成您的工作
组成部分:
constructor(private dummySer: DummyService) {}
foo(text) {
this.dummySer.foo(text);
}
HTML:
注意:在构造函数中标记您的服务私有。如Sakuto answer中所述,在组件中定义方法将完成您的工作
组成部分:
constructor(private dummySer: DummyService) {}
foo(text) {
this.dummySer.foo(text);
}
HTML:
注意:在构造函数中标记您的服务为私有。它应该可以工作,请尝试构造函数(public dummySer:DummyService){console.log(dummySer);}
它正确地记录了服务。但它在视图中仍然不起作用…你能在plunker上复制它吗?你使用AOT补偿吗?很难在plunker上实现,因为它是一个带有数据库的生产项目。不过,我用真实的组件和服务更新了这个问题。它应该可以工作,请尝试构造函数(公共dummySer:DummyService){console.log(dummySer);}
它正确地记录了服务。但它在视图中仍然不起作用……你能在plunker上复制它吗?你使用AOT补偿吗?在plunker上实现它很困难,因为它是一个带有数据库内容的生产项目。不过,我用真实的组件和服务更新了问题。我不知道这是一个糟糕的做法。给我打电话方法调用一个方法感觉是多余的…但无论如何,我从现在开始会这样做。虽然它不能解决问题,但错误只是更改为“this.dummySer.foo不是函数”。最奇怪的是,从另一个组件以相同的方式调用相同的服务是有效的。您必须将每个职责/模块分开,您的服务仅用于检索数据,而您的组件用于显示数据。您的组件检索要显示的数据,而不是HTML。否则,代码中的更新将是一件痛苦的事情。此外,我t允许您轻松地在代码中添加更多进程。我不知道这是一种不好的做法。调用方法来调用方法感觉是多余的…但无论如何,我从现在起将这样做。但这并不能解决问题,错误只是更改为“this.dummySer.foo不是函数”。最奇怪的是,从另一个组件以相同的方式调用相同的服务是有效的。您必须将每个职责/模块分开,您的服务仅用于检索数据,而您的组件用于显示数据。您的组件检索要显示的数据,而不是HTML。否则,代码中的更新将是一件痛苦的事情。此外,我t允许您轻松地在代码上添加更多进程。也许您应该编写this.dummySer.foo
而不是像我告诉Sakuto的那样编写dummySer.foo
,此解决方案只会将错误更改为“this.dummySer.foo不是函数”。但最奇怪的是,另一个调用服务的组件使用相同的代码以这种方式工作……也许你应该编写this.dummySer.foo
,而不是像我告诉Sakuto的那样编写dummySer.foo
,这个解决方案只会将错误更改为“this.dummySer.foo不是函数”.但最奇怪的是,另一个具有相同代码的组件调用该服务的工作方式是这样的。。。