- 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/
我错过了什么,我已完成 的安装指南中要求的所有步骤 native 脚本 运行 tns doctor 给我以下输出... C:\abc\xyz>tns doctor √ Getting environm
尝试从 {addToCart(book)}}/>}> 传递数据至}> 问题: 购物车 ( render={()=> ) 收到 null,但没有收到我尝试发送的对象 已放置“console.log...
这是 _app.tsx 的外观: function MyApp({ Component, pageProps }: AppProps) { return } 我在构建项目时遇到了这个错误: Ty
我的 Laravel Vue 组件收到以下警告: [Vue warn]: Avoid mutating a prop directly since the value will be overwrit
根据这个example更详细this one我刚刚遇到了一件奇怪的事情...... 如果我使用方法作为 addTab(title,icon,component) 并且下一步想使用 setTabComp
目前我有一个捕获登录数据的表单,一个带有 TIWDBGrid 的表单,它应该返回与我从我的 mysql 数据库登录时创建的 user_id 关联的任何主机,以及一个共享数据模块。 下面是我的登录页面代
在我的react-native应用程序中,我目前有一个本地Android View (用java编写)正确渲染。当我尝试将我的react-native javascript 组件之一放入其中时,出现以
我为作业编写了简单的代码。我引用了文档和几个 youtube 视频教程系列。我的 react 代码是正确的我在运行代码时没有收到任何错误。但是这些 react-boostrap 元素没有渲染。此代码仅
几周前我刚刚开始使用 Flow,从一周前开始我就遇到了 Flow 错误,我不知道如何修复。 代码如下: // @flow import React, { Component } from "react
我想在同一个 View 中加载不同的 web2py 组件,但不是同时加载。我有 5 个 .load 文件,它们具有用于不同场景的表单字段,这些文件由 onchange 选择脚本动态调用。 web2py
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 6年前关闭。 Improve t
Blazor 有 InputNumber将输入限制为数字的组件。然而,这呈现了一个 firefox 不尊重(它允许任何文本)。 所以我尝试创建一个过滤输入的自定义组件: @inherits Inpu
我在学习 AngularDART 组件时编写了以下简单代码,但没有显示任何内容,任何人都可以帮助我知道我犯了什么错误: 我的 html 主文件:
我想在初始安装组件时或之后为 div 设置动画(淡入)。动画完成后,div 不应消失。我正在尝试使用 CSSTransition 组件并查看 reactcommunity.org 上的示例,但我根本无
我需要一个 JSF 组件来表示甘特图。是否有任何组件库(如 RichFaces)包含这样的组件? 最佳答案 JFreeChart有甘特图和PrimeFaces有一个图像组件,允许您动态地流式传输内容。
从软件工程的角度来看,组件、模块和子系统之间有什么区别? 提前致谢! 最佳答案 以下是 UML 2.5 的一些发现: 组件:该子句指定一组结构,可用于定义任意大小和复杂性的软件系统。特别是,它将组件指
我有使用非托管程序集(名为 unmanaged.dll)的托管应用程序(名为 managed.exe)。到目前为止,我们已经创建了 Interop.unmanaged.dll,managed.exe
我有一个跨多个应用程序复制的 DAL(我知道它的设计很糟糕,但现在忽略它),我想做的是这个...... 创建一个将通过所有桌面应用程序访问的 WCF DAL 组件。任何人都可以分享他们对关注的想法吗?
我有一个 ComboBox 的集合声明如下。 val cmbAll = for (i /** action here **/ } 所有这些都放在一个 TabbedPane 中。我想这不是问题。那么我
使用 VB6 创建一个 VB 应用程序。应用程序的一部分显示内部的闪存。 当我使用 printform它只是打印整个应用程序。我不知道如何单独打印闪光部分。任何帮助,将不胜感激!.. 谢谢。 最佳答案
我是一名优秀的程序员,十分优秀!