- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到此错误:
core.js:1624 ERROR Error: Uncaught (in promise): Error: Can't resolve all parameters for GroupAddComponent: ([object Object], [object Object], ?, [object Object], [object Object], [object Object]).
Error: Can't resolve all parameters for GroupAddComponent: ([object Object], [object Object], ?, [object Object], [object Object], [object Object]).
at syntaxError (compiler.js:215)
我们有一个 AngularJS 和 Angular 6 混合应用程序。到目前为止,我已经拥有三个 Angular 6 组件。每当我单击最新的组件 ManageProgramComponent
,然后返回并单击其他两个组件 GroupAddComponent
或 GroupEditComponent
时,我都会得到上面的错误。但是,每当我单击任一 Group 组件,然后单击 ManageProgramComponent
时,一切都会正常。
GroupComponents 使用相同的模块,即:
import { NgModule, ModuleWithProviders } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';
import { MatDatepickerModule } from '@angular/material/datepicker';
import {
DateAdapter,
MAT_DATE_FORMATS,
MAT_DATE_LOCALE
} from '@angular/material/core';
import { MomentDateAdapter } from '@angular/material-moment-adapter';
import { MatFormFieldModule, MatInputModule } from '@angular/material';
import { MatNativeDateModule } from '@angular/material';
import { HttpClientModule } from '@angular/common/http';
import { GroupEditComponent } from '../components/group-edit.component';
import { GroupAddComponent } from '../components/group-add.component';
import { DATE_FORMATS } from '../models/group';
import { GroupService } from '../services/group.service';
import { ApiService } from '../services/api.service';
/* import { SpinLoaderComponent } from '../components/spin-loader.component'; */
import { ProgramService } from '../services/program.service';
const routes: Routes = [
{ path: 'add-flow', component: GroupAddComponent },
{ path: 'add/:program', component: GroupAddComponent },
{ path: ':id', component: GroupEditComponent }
];
export const routing: ModuleWithProviders = RouterModule.forChild(routes);
@NgModule({
imports: [
routing,
CommonModule,
FormsModule,
ReactiveFormsModule,
MatFormFieldModule,
MatInputModule,
MatDatepickerModule,
MatNativeDateModule,
HttpClientModule
],
declarations: [GroupEditComponent, GroupAddComponent],
providers: [
{
provide: 'Util',
useFactory: ($injector: any) => $injector.get('Util'),
deps: ['$injector']
},
{
provide: 'Session',
useFactory: ($injector: any) => $injector.get('Session'),
deps: ['$injector']
},
{
provide: '$location',
useFactory: ($injector: any) => $injector.get('$location'),
deps: ['$injector']
},
GroupService,
ProgramService,
ApiService,
{
provide: DateAdapter,
useClass: MomentDateAdapter,
deps: [MAT_DATE_LOCALE]
},
{ provide: MAT_DATE_FORMATS, useValue: DATE_FORMATS }
]
})
export class GroupModule {}
程序模块:
import { NgModule, ModuleWithProviders } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import { Routes, RouterModule } from '@angular/router';
import { HttpClientModule } from '@angular/common/http';
import { MatTooltipModule } from '@angular/material/tooltip';
/* import { SpinLoaderComponent } from '../components/spin-loader.component'; */
import { ToolBoxComponent } from '../components/tool-box.component';
import { ManageProgramComponent } from '../components/manage-program/manage-program.component';
import { GroupService } from '../services/group.service';
import { ProgramService } from '../services/program.service';
import { ApiService } from '../services/api.service';
const routes: Routes = [{ path: ':id', component: ManageProgramComponent }];
export const routing: ModuleWithProviders = RouterModule.forChild(routes);
@NgModule({
imports: [
routing,
CommonModule,
FormsModule,
ReactiveFormsModule,
MatTooltipModule,
HttpClientModule
],
declarations: [ManageProgramComponent, ToolBoxComponent],
providers: [
{
provide: 'Util',
useFactory: ($injector: any) => $injector.get('Util'),
deps: ['$injector']
},
{
provide: 'Session',
useFactory: ($injector: any) => $injector.get('Session'),
deps: ['$injector']
},
{
provide: '$location',
useFactory: ($injector: any) => $injector.get('$location'),
deps: ['$injector']
},
GroupService,
ProgramService,
ApiService
]
})
export class ProgramModule {}
主应用模块:
import './polyfills';
import 'core-js/es7/reflect';
import 'zone.js';
import * as angular from 'angular';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { UpgradeModule, setAngularLib } from '@angular/upgrade/static';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { SpinLoaderComponent } from './components/spin-loader.component';
setAngularLib(angular);
import app from './main/app';
import { RootComponent } from './root.component';
import {
RouterModule,
Routes,
Router,
UrlHandlingStrategy
} from '@angular/router';
export class Ng1Ng2UrlHandlingStrategy {
shouldProcessUrl(url: any) {
return (
url.toString().startsWith('/group/') ||
url.toString().startsWith('/group-test/') ||
url.toString().startsWith('/manage-program/')
);
}
extract(url: any) {
return url;
}
merge(url: any, whole: any) {
return url;
}
}
const routes: Routes = [
{
path: 'group',
loadChildren: './modules/group.module#GroupModule'
},
{
path: 'manage-program',
loadChildren: './modules/program.module#ProgramModule'
}
];
@NgModule({
exports: [RouterModule]
})
export class AppRoutingModule {}
@NgModule({
imports: [
BrowserModule,
RouterModule.forRoot(routes),
UpgradeModule,
BrowserAnimationsModule
],
providers: [
{ provide: UrlHandlingStrategy, useClass: Ng1Ng2UrlHandlingStrategy }
],
declarations: [RootComponent],
entryComponents: [RootComponent],
bootstrap: [RootComponent]
})
export class AppModule {
constructor(private upgrade: UpgradeModule) {}
ngDoBootstrap() {}
}
export function setUpLocationSync(ngUpgrade: UpgradeModule) {
if (!ngUpgrade.$injector) {
throw new Error(`
RouterUpgradeInitializer can be used only after UpgradeModule.bootstrap has been called.
Remove RouterUpgradeInitializer and call setUpLocationSync after UpgradeModule.bootstrap.
`);
}
const router: Router = ngUpgrade.injector.get(Router);
const url = document.createElement('a');
ngUpgrade.$injector
.get('$rootScope')
.$on('$locationChangeStart', (_: any, next: string, __: string) => {
url.href = next;
router.navigateByUrl(url.pathname);
});
}
const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule).then(platformRef => {
const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;
upgrade.bootstrap(document.body, [app.name], { strictDi: true });
setUpLocationSync(upgrade);
});
组添加组件:
import { Component, OnInit, Input, Inject } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { GroupService } from '../services/group.service';
import { Group } from '../models/group';
import { ApiService } from '../services/api.service';
import { ProgramService } from '../services/program.service';
declare var jQuery;
@Component({
templateUrl: './views/components/group-add.component.html'
})
export class GroupAddComponent implements OnInit {
@Input() groups: Group[] = [new Group()];
@Input() selectedGroup: Group;
@Input() groupSelectedForRemove: Group;
$location;
Session;
@Input() program: any = {};
@Input() sites;
private previousGroups = [];
loading: boolean = false;
currentYear: any = new Date().getFullYear();
private programFlowData: any;
constructor(
private route: ActivatedRoute,
private _groupService: GroupService,
private _programService: ProgramService,
private apiService: ApiService,
@Inject('$location') $location: any,
@Inject('Session') Session: any
) {
this.$location = $location;
this.Session = Session;
}
ngOnInit(): void {
this.selectedGroup = this.groups[0];
const program_id = this.route.snapshot.paramMap.get('program');
if (program_id) {
this.apiService
.get('program/' + program_id)
.subscribe(program => (this.program = program));
this.apiService
.get<any>('site', {
where: JSON.stringify({ program: program_id })
})
.subscribe(sites => {
this.sites = sites._items;
let sites_id = [];
for (var i = 0; i < this.sites.length; i++)
sites_id.push(this.sites[i]._id);
let params = {
where: JSON.stringify({ site: { $in: sites_id } })
};
this.apiService
.get<any>('group', params)
.subscribe(groups => {
this.previousGroups = groups._items;
this.setupJoyride();
});
});
} else {
//add program flow
let programFlowData;
try {
let programDataRaw = sessionStorage.getItem(
'program-flow-data'
);
sessionStorage.removeItem('program-flow-data');
programFlowData = JSON.parse(programDataRaw);
this.programFlowData = programFlowData;
this.sites = programFlowData.sites.map(site => ({
name: site
}));
this.program.name = programFlowData.name;
this.setupJoyride();
} catch (e) {
this.$location.path('add-program');
}
}
}
setupJoyride() {
let self = this;
jQuery(function($) {
var _oldShow = $.fn.show;
$.fn.show = function(speed, oldCallback) {
return $(this).each(function() {
var obj = $(this),
newCallback = function() {
if ($.isFunction(oldCallback)) {
oldCallback.apply(obj);
}
obj.trigger('afterShow');
};
// you can trigger a before show if you want
obj.trigger('beforeShow');
// now use the old function to show the element passing the new callback
_oldShow.apply(obj, [speed, newCallback]);
});
};
var _oldHide = $.fn.hide;
$.fn.hide = function(speed, oldCallback) {
return $(this).each(function() {
var obj = $(this),
newCallback = function() {
if ($.isFunction(oldCallback)) {
oldCallback.apply(obj);
}
obj.trigger('afterHide');
};
// you can trigger a before hide if you want
obj.trigger('beforeHide');
// now use the old function to show the element passing the new callback
_oldHide.apply(obj, [speed, newCallback]);
});
};
});
jQuery(document).foundation();
jQuery('div.tooltip.joyride').on('beforeShow', function() {
let idElementFor = <string>jQuery(this).data('joyrideFor');
if (idElementFor.endsWith('1') || idElementFor.endsWith('2'))
idElementFor = idElementFor.substr(0, idElementFor.length - 1);
setTimeout(function() {
if (jQuery('div.tooltip.joyride:visible').length > 0) {
jQuery('.foundation-joyride-overlay').addClass('visible');
jQuery(idElementFor).addClass(
'foundation-joyride-current-target'
);
}
}, 200);
});
jQuery('div.tooltip.joyride').on('beforeHide', function() {
let idElementFor = jQuery(this).data('joyrideFor');
if (idElementFor.endsWith('1') || idElementFor.endsWith('2'))
idElementFor = idElementFor.substr(0, idElementFor.length - 1);
jQuery(idElementFor).removeClass(
'foundation-joyride-current-target'
);
setTimeout(function() {
if (jQuery('div.tooltip.joyride:visible').length == 0) {
jQuery('.foundation-joyride-overlay').removeClass(
'visible'
);
}
}, 200);
});
jQuery('div.tooltip.joyride').on(
'click.zf.joyride',
'[data-joyride-close]',
function(e) {
let joyrideStatus = self.Session.user.joyride_done;
if (typeof joyrideStatus === 'undefined') joyrideStatus = {};
else joyrideStatus = { ...self.Session.user.joyride_done };
if (self.program._id) joyrideStatus.program_pl_step_3 = true;
else joyrideStatus.program_step_3 = true;
self.apiService
.patch(self.Session.user, { joyride_done: joyrideStatus })
.subscribe(_ => {
self.Session.user.joyride_done = joyrideStatus;
self.Session.setUser(self.Session.user);
});
}
);
let userJoyride = self.Session.user.joyride_done;
if (
userJoyride == undefined ||
Object.keys(userJoyride).length == 0 ||
userJoyride.program_pl_step_3 === undefined ||
userJoyride.program_pl_step_3 === false
) {
jQuery('#add-group-joyride').foundation('start');
}
}
close(): void {
if (this.program._id) {
this.$location.path('dashboard').search({
p: this.program._id
});
} else {
this.$location.path('dashboard');
}
}
goBack(): void {
sessionStorage.setItem(
'group-add-flow-data',
JSON.stringify(this.programFlowData)
);
this.$location.path('add-program');
}
canSave(): boolean {
let filledGroups = 0;
for (let group of this.groups)
filledGroups += group.completed() ? 1 : 0;
return filledGroups > 0;
}
addGroup(): void {
let newGroup = new Group();
this.groups.push(newGroup);
this.selectedGroup = newGroup;
}
startDateChanged(endDatePicker): void {
if (
this.selectedGroup.end == undefined ||
this.selectedGroup.end <= this.selectedGroup.start
) {
endDatePicker.open();
}
}
checkDuplicatedGroups() {
let allNames = {};
for (let pGroup of this.previousGroups) {
let name = pGroup.name;
let siteName;
for (let s of this.sites) {
if (s._id == pGroup.site) {
siteName = s.name;
break;
}
}
if (allNames[name + siteName]) {
return true;
} else {
allNames[name + siteName] = true;
}
}
for (let group of this.groups) {
let name = group.name;
if (name == '') continue;
let siteName = group.site;
if (allNames[name + siteName]) {
return true;
} else {
allNames[name + siteName] = true;
}
}
return false;
}
save(): void {
if (this.checkDuplicatedGroups()) {
alert('Error: You entered a duplicated group name.');
return;
}
let groupsCompleted = this.groups.filter(group => group.completed());
this.loading = true;
if (this.program._id) {
//the program and sites already exist
let groupsSend = [];
for (let group of groupsCompleted) {
let groupSend = <any>{ ...group };
for (let s of this.sites) {
if (s.name == group.site) groupSend.site = s._id;
}
groupsSend.push(groupSend);
}
this._groupService.createGroups(groupsSend).subscribe(() => {
this.loading = false;
let site_id = groupsSend.filter(group => {
return group.name == this.selectedGroup.name;
})[0].site;
this.$location.path('dashboard').search({
p: this.program._id,
s: site_id
});
});
} else {
let data = { ...this.programFlowData };
data.groups = groupsCompleted;
data.leaders = [];
this._programService
.createProgramFlow(data)
.subscribe(responseData => {
this.loading = false;
this.$location.path('dashboard').search({
p: responseData.program_id
});
});
}
}
}
团体服务:
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { catchError, map, tap } from 'rxjs/operators';
import { Group } from '../models/group';
import { ApiService } from './api.service';
import { GroupModule } from '../modules/group.module';
@Injectable({
providedIn: GroupModule
})
export class GroupService {
private groupUrl = 'group'; // URL to web api
constructor(private api: ApiService) {}
}
节目服务:
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { ApiService } from './api.service';
import { GroupModule } from '../modules/group.module';
import { ProgramModule } from '../modules/program.module';
@Injectable({
providedIn: GroupModule
})
export class ProgramService {
private programUrl = 'program'; // URL to web api
/* constructor(private api: ApiService) {} */
console.log(word);
}
}
API 服务:
import { Injectable, Inject } from '@angular/core';
import { Observable, of } from 'rxjs';
import { catchError, map, tap } from 'rxjs/operators';
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
import { UpgradeModule } from '@angular/upgrade/static';
import { UtilFactory } from '../services/js/util.factory';
import { GroupModule } from '../modules/group.module';
import { ProgramModule } from '../modules/program.module';
@Injectable({
providedIn: GroupModule
})
export class ApiService {
private baseUrl = window['API_URL']; // URL to web api
private httpOptions = {};
constructor(
private http: HttpClient,
private upgrade: UpgradeModule,
@Inject('Util') Util: any,
@Inject('Session') Session: any
) {
let headersMap = {
'Content-Type': 'application/json',
Authorization: Util.getToken()
};
if (Session.entered_as() && Session.getUser())
headersMap['EnteredAs'] = Session.getUser().email;
this.httpOptions = {
headers: new HttpHeaders(headersMap)
};
}
}
错误是什么?
最佳答案
问题出在 ApiService 中,您尝试将模块作为依赖项注入(inject),
constructor(
private http: HttpClient,
private upgrade: UpgradeModule //remove this
}
这个构造函数(private api: ApiService) {}
也可能会导致如上所述的冲突,因此请将其注释掉。
确保是否需要它,因为您没有使用它,如果不需要,请将其从所有组件/服务中删除。
此外,您不应依赖其他服务。在这种情况下你应该使用@injectable。
关于javascript - 单击另一个组件后无法解决组件中的参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51678288/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!