我的> ng serve
或> ng build
命令不会产生任何错误,并且该应用程序可以运行。但是当我运行> ng build --prod
时,它会引发以下错误。我试图在互联网上找到很多东西,并尝试了
但是,错误仍然存在。
P.S .: 下降投票者,请先指定解决方案或任何可摘要的解决方案 原因,或者跳过此问题而不碰它,因为您无法 评估情况。但是不要造成麻烦。
C:\wamp\www\ngapp>ng build --prod
10% building modules 3/3 modules 0 activeWarning: Can't resolve all parameters for LoginService in C:/wamp/www/ngapp/sr
c/app/abstract/login.service.ts: ([object Object], ?). This will become an error in Angular v6.x
Warning: Can't resolve all parameters for UserService in C:/wamp/www/ngapp/src/app/abstract/user.service.ts: ([object Ob
ject], ?). This will become an error in Angular v6.x
Date: 2018-06-30T06:40:13.988Z
Hash: 72312a1071e597367666
Time: 10125ms
chunk {scripts} scripts.385b291e179030219400.js (scripts) 136 kB [rendered]
chunk {0} runtime.a66f828dca56eeb90e02.js (runtime) 1.05 kB [entry] [rendered]
chunk {1} styles.14764545cc77d1b25789.css (styles) 159 kB [initial] [rendered]
chunk {2} polyfills.207dcc605630215505f5.js (polyfills) 130 bytes [initial] [rendered]
chunk {3} main.f58b96bf9bf614ca37d4.js (main) 128 bytes [initial] [rendered]
ERROR in : Can't resolve all parameters for UserService in C:/wamp/www/ngapp/src/app/abstract/user.service.ts: ([object
Object], ?).
login.service.ts
import { Injectable, forwardRef, Inject } from '@angular/core';
//import { Http } from '@angular/http';
import { HttpClient } from '@angular/common/http';
import { catchError, map, retry } from 'rxjs/operators';
import { throwError } from 'rxjs';
import { NotFoundError } from '../errors/notfound-error';
import { Unauthorized } from '../errors/unauthorized-error';
import { AppError } from '../errors/app-error';
import * as GLOBAL from 'globals';
interface Credentials {
username: string,
password: string
}
@Injectable({
providedIn: 'root'
})
export abstract class LoginService {
// readonly USER_NOT_FOUND = 404;
// readonly UNAUTHENTICATED = 401;
private http: HttpClient;
constructor(@Inject(forwardRef(() => HttpClient)) http:HttpClient, private url: string) {
this.http = http;
}
check(credential: Credentials, url?) {
url = url ? url : this.url;
return this.http.post(url, credential)
.pipe(
//map((response) => { console.log(response.json()); return response.json() }),
map((response) => { return response }),
retry(0),
catchError((error: Response) => { return this.handleError(error) })
);
}
isUserExists(user: {username: string}, url?){
url = url ? url : this.url;
return this.http.post(url, user)//, {observe: 'response'})
.pipe(
map(response => { return response;}),
catchError( error => this.handleError(error))
)
}
private handleError(error: any) {
//console.log("handleError: ", error);
if (error.status as number === GLOBAL.USER_NOT_FOUND) {
return throwError(new NotFoundError(error));
}
else if (error.status as number === GLOBAL.UNAUTHENTICATED) {
let e = new Unauthorized(error);
return throwError(e);
}
else {
return throwError(new AppError(error));
}
}
}
auth.service.ts 扩展了LoginService
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { LoginService } from '../abstract/login.service';
//import { Http } from '@angular/http';
@Injectable({
providedIn: 'root'
})
export class AuthService extends LoginService {
constructor(http: HttpClient) {
super(http, "http://demo1601932.mockable.io/login-invalid");
}
isUserExists(user: {username: string}){
let url;
if (user.username == "cust@ngapp.com")
url = "http://demo1601932.mockable.io/user-valid";
else
url = "http://demo1601932.mockable.io/user-invalid";
return super.isUserExists(user, url);
}
check(user){
let url;
if (user.username == "cust@ngapp.com" && user.password == "cust1234")
url = "https://demo1601932.mockable.io/login-valid";
else
url = "https://demo1601932.mockable.io/login-invalid";
return super.check(user, url);
}
}
user.service.ts
import { Injectable, forwardRef, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { catchError, map, retry } from 'rxjs/operators';
import { throwError } from 'rxjs';
import { NotFoundError } from '../errors/notfound-error';
import { Unauthorized } from '../errors/unauthorized-error';
import { AppError } from '../errors/app-error';
import * as GLOBAL from 'globals';
@Injectable({
providedIn: 'root'
})
export class UserService {
private http: HttpClient;
constructor(@Inject(forwardRef(() => HttpClient)) http:HttpClient, private url: string) {
this.http = http;
}
getAll(url? : string){
url = url ? url : this.url;
return this.http.get(url).pipe(
map(response => { return response;}),
catchError( error => this.handleError(error))
)
}
getUser(uid, url? : string){
url = url ? url : this.url;
return this.http.get(url + "/" + uid)
.pipe(
retry(2),
catchError( error => this.handleError(error))
)
}
create(user, url? : string){
url = url ? url : this.url;
return this.http.put(url, user).pipe(
map(response => { return response;}),
catchError( error => this.handleError(error))
)
}
update(uid, data, url? : string){
url = url ? url : this.url;
return this.http.patch(url + '/'+ uid, data, { observe: "response"}).pipe(
map(response => {
// console.log('Headers', response.headers.keys());
// console.log('Body', response.body);
return response.body;
}),
retry(1),
catchError( error => this.handleError(error))
)
}
private handleError(error: any) {
//console.log("handleError: ", error);
if (error.status as number === GLOBAL.USER_NOT_FOUND) {
return throwError(new NotFoundError(error));
}
else if (error.status as number === GLOBAL.UNAUTHENTICATED) {
let e = new Unauthorized(error);
return throwError(e);
}
else {
return throwError(new AppError(error));
}
}
}
customer.service.ts 扩展了UserService
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { UserService } from '../abstract/user.service';
@Injectable({
providedIn: 'root'
})
export class CustomersService extends UserService {
constructor(http: HttpClient) {
super(http, "http://demo1601932.mockable.io/customers/");
}
getAll(){
return super.getAll("http://demo1601932.mockable.io/customers/get");
}
get(uid){
return super.getUser(uid, "http://demo1601932.mockable.io/customer/get");
}
create(user){
return super.create(user, "http://demo1601932.mockable.io/customers");
}
update(uid, userData){
return super.update(uid, userData, "http://demo1601932.mockable.io/customers");
}
//Admin
getall4Admin(){
return super.getAll("https://jsonplaceholder.typicode.com/users");
}
get4Admin(uid){
return super.getUser(uid, "https://jsonplaceholder.typicode.com/users");
}
}
如果有人愿意,我可以发布所有3个模块[管理员,客户,应用]模块文件代码。
答案 0 :(得分:2)
在UserService
中,您已将服务标记为@Injectable
,这意味着Angular需要知道如何实例化它。不知道您要使用什么URL。
如果您不想直接将UserService
注入到构造函数中,则只需删除:
@Injectable({
providedIn: 'root'
})
来自UserService
。
或者,如果您确实想注入到构造函数中,请从构造函数中删除url
属性,并使用set
ter进行设置,方法是将以下代码添加到{{1} }
UserService
然后在子类构造函数中,使用set url(url: string) {
this.url = url;
}