- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试使用 karma jasmin 进行测试时,出现此错误...
NullInjectorError: StaticInjectorError(DynamicTestModule)[DaterangepickerDirective -> LocaleService]:
StaticInjectorError(Platform: core)[DaterangepickerDirective -> LocaleService]:
NullInjectorError: No provider for LocaleService!
我的组件
import { Component, OnInit } from '@angular/core';
import { NgxSpinnerService } from 'ngx-spinner';
import { ApiService } from '../../../services/api.service';
import * as moment from 'moment';
@Component({
selector: 'ngx-item-analytics',
templateUrl: './item-analytics.component.html',
styleUrls: ['./item-analytics.component.scss']
})
export class ItemAnalyticsComponent implements OnInit {
data: any;
data2: any;
showBarchart1: boolean = false;
showBarchart2: boolean = false;
maxDate: moment.Moment;
minDate: moment.Moment;
datepickerChanges:boolean = false;
dateGrouped:Date;
alwaysShowCalendars: boolean;
keepCalendarOpeningWithRange: boolean;
showRangeLabelOnInput: boolean;
invalidDates: moment.Moment[] = [];
selected: any;
startDate:any;
endDate:any;
datagroupedChart:boolean=false;
datagrouped:any[] =[];
venues: any = [];
selectedVenue: any = 'Oahu';
selVenue: any;
ranges: any = {
Today: [moment(), moment()],
Yesterday: [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [
moment()
.subtract(1, 'month')
.startOf('month'),
moment()
.subtract(1, 'month')
.endOf('month')
],
'Last 3 Month': [
moment()
.subtract(3, 'month')
.startOf('month'),
moment()
.subtract(1, 'month')
.endOf('month')
]
};
isInvalidDate = (m: moment.Moment) => {
return this.invalidDates.some(d => d.isSame(m, 'day') );
}
timezone: any;
constructor(private spinner: NgxSpinnerService,
private apiService: ApiService,) {
this.datagrouped = [{"State":"CA","Under 5 Years":2704659,"5 to 13 Years":4499890,"14 to 17 Years":2159981,"18 to 24 Years":3853788,"25 to 44 Years":10604510,"45 to 64 Years":8819342,"65 Years and Over":4114496},{"State":"TX","Under 5 Years":2027307,"5 to 13 Years":3277946,"14 to 17 Years":1420518,"18 to 24 Years":2454721,"25 to 44 Years":7017731,"45 to 64 Years":5656528,"65 Years and Over":2472223},{"State":"NY","Under 5 Years":1208495,"5 to 13 Years":2141490,"14 to 17 Years":1058031,"18 to 24 Years":1999120,"25 to 44 Years":5355235,"45 to 64 Years":5120254,"65 Years and Over":2607672},{"State":"FL","Under 5 Years":1140516,"5 to 13 Years":1938695,"14 to 17 Years":925060,"18 to 24 Years":1607297,"25 to 44 Years":4782119,"45 to 64 Years":4746856,"65 Years and Over":3187797},{"State":"IL","Under 5 Years":894368,"5 to 13 Years":1558919,"14 to 17 Years":725973,"18 to 24 Years":1311479,"25 to 44 Years":3596343,"45 to 64 Years":3239173,"65 Years and Over":1575308},{"State":"PA","Under 5 Years":737462,"5 to 13 Years":1345341,"14 to 17 Years":679201,"18 to 24 Years":1203944,"25 to 44 Years":3157759,"45 to 64 Years":3414001,"65 Years and Over":1910571}];
this.maxDate = moment().add(0, 'weeks');
this.minDate = moment().subtract(3, 'days');
this.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
this.alwaysShowCalendars = true;
this.keepCalendarOpeningWithRange = true;
this.showRangeLabelOnInput = true;
this.dateGrouped = new Date()
this.selected = {startDate: moment().subtract(30, 'days'), endDate: moment()};
setTimeout(() => {
this.invalidDates = [moment().add(2, 'days'), moment().add(3, 'days'), moment().add(5, 'days')];
}, 5000);
var m = moment(this.selected.startDate);
m.set({hour:0,minute:0,second:0,millisecond:0})
this.startDate = m.format('YYYY-MM-DD 00:00');
this.endDate = moment(this.selected.endDate).format('YYYY-MM-DD 23:59');
}
rangeClicked(range) { }
datesUpdated(range) {
var m = moment(this.selected.startDate);
m.set({hour:0,minute:0,second:0,millisecond:0})
this.startDate = m.format('YYYY-MM-DD 00:00');
this.endDate = moment(this.selected.endDate).format('YYYY-MM-DD 23:59');
this.viaAirportAnalytics();
}
viaAirportAnalytics(){
var statrdate = new Date(this.startDate).toISOString();
var endDate = new Date(this.endDate).toISOString();
this.spinner.show();
this.apiService.getVenues().subscribe((res)=>{
this.spinner.hide();
this.venues = res.body.venues;
this.selVenue = this.venues[0];
for(let sel of this.venues){
if(sel.name == this.selectedVenue) {
this.selVenue = sel;
}
}
let arg = {
startDate:statrdate,
endDate:endDate,
venueId:this.selVenue._id
}
this.spinner.show();
this.apiService.getItemAnalyticsItemCategory(arg).subscribe((res)=>{
this.spinner.hide();
let dataChart = [];
res.chartData.map(data =>{
dataChart.push(
{gate:data.category, deliveries: data.count})
})
if(dataChart.length>0){
this.showBarchart1 = true;
this.data = dataChart;
} else {
this.showBarchart1 = false;
}
});
this.spinner.show();
this.apiService.getItemAnalyticsItems(arg).subscribe((res)=>{
this.spinner.hide();
let dataChart = [];
res.chartData.map(data =>{
dataChart.push(
{gate:data.menuItem, deliveries: data.count})
})
if(dataChart.length>0){
this.showBarchart2 = true;
this.data2 = dataChart;
} else {
this.showBarchart2 = false;
}
});
});
}
onDateSelect(event){
var m = moment(event);
m.set({hour:0,minute:0,second:0,millisecond:0})
var r = moment(event);
r.set({hour:23,minute:59,second:59,millisecond:59})
this.startDate = m.format('YYYY-MM-DD 00:00');
this.endDate = r.format('YYYY-MM-DD 23:59');
}
ngOnInit() { }
}
规范.ts
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { StoreAnalyticsComponent } from './store-analytics.component';
import { NbCardModule, NbDatepickerModule } from '@nebular/theme';
import { FormsModule } from '@angular/forms';
import { ChartModule } from 'angular2-chartjs';
import { NgxDaterangepickerMd, LocaleService } from 'ngx-daterangepicker-material';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { HttpClient, HttpHandler } from '@angular/common/http';
describe('StoreAnalyticsComponent', () => {
let component: StoreAnalyticsComponent;
let fixture: ComponentFixture<StoreAnalyticsComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports:
[
NbCardModule,
FormsModule,
NbDatepickerModule,
NgxDaterangepickerMd,
ChartModule,
],
providers:[
HttpClient,
HttpHandler,
],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
declarations: [ StoreAnalyticsComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(StoreAnalyticsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
组件 2
组件
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ApiService } from '../../../services/api.service';
import { NgxSpinnerService } from "ngx-spinner";
@Component({
selector: 'ngx-order-confirmation',
templateUrl: './order-confirmation.component.html',
styleUrls: ['./order-confirmation.component.scss']
})
export class OrderConfirmationComponent implements OnInit {
cartId:any;
recipientDetails:any;
subscriptionId:any;
interval;
timeLeft: number = 20;
constructor(public router: Router,public ApiService: ApiService, private spinner: NgxSpinnerService) {
this.spinner.show();
this.recipientDetails = JSON.parse(localStorage.getItem('recipientDetails')) || {};
this.subscriptionDetail();
}
ngOnInit() {
}
subscriptionDetail(){
this.ApiService.subscriptionDetails(this.recipientDetails.recipientAddressesId).subscribe((res)=>{
if(res && res.body && res.body.subscriptionDetails && res.body.subscriptionDetails[0]){
this.subscriptionId = res.body.subscriptionDetails[0].subscriptionId;
this.spinner.hide();
} else {
setTimeout(()=>{
this.subscriptionDetail();
}, 2000);
}
});
}
}
规范.ts
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { OrderConfirmationComponent } from './order-confirmation.component';
import { RouterTestingModule } from '@angular/router/testing';
import { HttpClientTestingModule } from '@angular/common/http/testing';
describe('OrderConfirmationComponent', () => {
let component: OrderConfirmationComponent;
let fixture: ComponentFixture<OrderConfirmationComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ OrderConfirmationComponent ],
imports: [RouterTestingModule,HttpClientTestingModule],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(OrderConfirmationComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
谢谢...................................... ..................................................... ..................................................... ..................................................... ..................................................... ...
最佳答案
NgxDaterangepickerMd.forRoot()
应该提供所有必需的服务以及 LocaleService
TestBed.configureTestingModule({
imports: [ [
...
NgxDaterangepickerMd.forRoot(),
关于Angular Karma Jasmine - 没有 LocaleService 的提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63204570/
我正在尝试在项目中学习和添加 Angular 国际化。我只能理解 Angular 文档 (https://angular.io/guide/i18n-overview) 的编译时翻译。 我需要这样的东
在我的 Angular 应用程序中,基于登录用户,我想通过显示/隐藏不同的菜单项或允许/禁止某些路由来授予或限制功能。 目前成功登录后,我的 .NET Core API 会返回一个 JWT token
我是 Angular 的新手,目前我已经看过 angular.io 网站提供的一些示例。但是在component decorator在文档中的解释,它指出 Angular components are
这里是service employee-service.service.ts的代码 import { Injectable } from '@angular/core'; import { HttpC
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
如何正确安装 PUG/JADE 到 Angular 2 或更高版本 这样在工作和 AOT 和 JiT 的同时 工作单元和集成测试 并且在创建每个新组件时不会受到太多影响 最佳答案 我看到了很多解决方案
我的 Angular 12 应用程序中有一些通用组件,我计划将其创建为一个 Angular 库,以便其他应用程序也可以使用它。我们有一些应用程序在较低版本的 angular(例如 angular 8/
tl;dr; ng build 删除了包含我编译的自定义库的/dist 文件夹。这会使我项目代码中对该库的所有引用无效,从而导致 ng build 最终失败。我做错了什么? 我关注了documenta
我正在将一些“遗留”(非 typescript )js 库导入到我的 Angular SPA 中。 通常我只是从 cdn 添加一个负载到 index.html 就像: 在 Angular 分量中我只
我有这个 angular 应用程序,它基本上使用了库的概念。 我有 2 个名为 的库Lib1 和 lib2 根据他们所服务的微服务分组。 现在我将这些库导入主应用程序,即 应用1 事情一直到现在。 现
我在我的项目中启用了 angular Universal。我现在想完全删除它。我试图删除以下文件 /server.ts /webpack.server.config.js /src/tsconfig.
我已经有一个 AuthService 在登录时对用户进行身份验证,并且 AuthGuard 在未登录的情况下阻止访问。 某些页面我通过 UserProfile/Role 限制访问,但现在我需要阻止页面
我正在尝试使用 angular、TypeORM、SQLite 和其他组件作为 webpack 构建 Electron 应用程序。 我从在 GitHub 上找到的示例开始我的开发:https://git
我在从 Angular 8 更新到 9 并运行时遇到以下错误 ng 更新@angular/material: Package "@angular/flex-layout" has an incompa
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在我的 h1 元素“之前”创建一个小的程式化三 Angular 形图案,但我无法正确地圆 Angular 。右上角没问题,但其他两个有剪裁问题。 这是输出以及形状的放大图像: 使用的代码如下: h
我有一个 Angular 元素,带有自定义标记名 - fancy-button。如何将 fancy-button 嵌入 Angular 应用程序? 我已经尝试了以下方法,但都没有用 - 在 index
我已将我的项目从 angular 5.2.9 升级到 angular 6.0.0-rc.5。 除了包路径中的几个快速 RxJS 修复外,一切看起来都不错。(此链接非常有用:Want to upgrad
我是一名优秀的程序员,十分优秀!