我今天开始从Angular 4.4.4升级到5.1.1.我不得不升级一些依赖于角度的其他软件包.我得到一个错误,上下文很少,我不知道从哪里开始.有没有其他人看过这个并知道问题是什么?
$ ng serve --aot=false
** NG Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **
Date: 2017-12-19T15:26:36.137Z
Hash: bf0b773d5dfafdd9133b
Time: 16934ms
chunk {inline} inline.bundle.js (inline) 5.79 kB [entry] [rendered]
chunk {main} main.bundle.js (main) 2.93 kB [initial] [rendered]
chunk {polyfills} polyfills.bundle.js (polyfills) 636 bytes [initial] [rendered]
chunk {scripts} scripts.bundle.js (scripts) 307 kB [initial] [rendered]
chunk {styles} styles.bundle.js (styles) 4.03 MB [initial] [rendered]
chunk {vendor} vendor.bundle.js (vendor) 855 kB [initial] [rendered]
ERROR in TypeError: Cannot read …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个可重用的基础存储库类,开发人员将传递一个表示通用ObjectContext
的基础知识库,基本存储库将创建它的实例Activator.CreateInstance
.调试时我想使用nuget包CommunityEFProviderWrappers.EFTracingProvider
.所以我设置对象上下文的代码如下所示:
public void RenewDataContext()
{
#if DEBUG
// get the default container name
var containerName = Activator.CreateInstance<T>().DefaultContainerName;
// create an instance of the object context using EF Trace
Context = (T)Activator.CreateInstance(typeof(T), EFTracingProviderUtils.CreateTracedEntityConnection(containerName));
Context.EnableTracing();
#else
Context = Activator.CreateInstance<T>();
#endif
}
Run Code Online (Sandbox Code Playgroud)
问题是,当它试图创建的实例,这总是会引发以下错误ObjectContext
与EFTracingProvider
:"指定的架构是无效的错误:\ r \n(0,0):错误0175:指定的存储提供不能在配置中找到,或者无效."
如果我用web配置中的连接字符串的名称替换containerName并且不执行第一次,Activator.CreateInstance<T>()
那么它可以正常工作.所以这个问题与我创建第一个实例然后第二个实例的事实有关.
这是我尝试过的:
我试图避免开发人员传递ObjectContext
AND的通用类型连接字符串的名称.这似乎有点多余.
所以我的问题是:如何从表示对象上下文的泛型中获取连接名称,并且仍然能够使用它来使用EF Trace生成的EntityConnection创建对象上下文的实例?
我的问题是关于为什么这种方法不起作用,而不是关于可能的解决方法.
我看到奇怪的行为,因为通过解构赋值(或Object.assign
)添加到对象的属性在传递时会出现,forRoot
但在注入服务时不存在.此外,初始化后进行的更新在传递到forRoot
服务时存在但在注入服务时不存在.这仅在使用AOT构建时发生.
我创建了一个重现问题的最小项目:https: //github.com/bygrace1986/wat
创建一个具有静态forRoot
方法的模块,该方法将接受一个对象,然后通过它提供InjectionToken
并注入到服务中.
TestModule
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { TestDependency, TEST_DEPENDENCY, TestService } from './test.service';
@NgModule({
imports: [
CommonModule
],
declarations: []
})
export class TestModule {
static forRoot(dependency?: TestDependency): ModuleWithProviders {
return {
ngModule: TestModule,
providers: [
TestService,
{ provide: TEST_DEPENDENCY, useValue: dependency }
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
TestService的
import …
Run Code Online (Sandbox Code Playgroud) 如果用户会话超时,那么他将被重定向到登录页面。
问题:如果他们有一个模式打开,那么当用户被重定向时它保持打开状态。
使用ng-bootstrap
不涉及将代码放入每个模式(或基类)或包装NgbModal
服务的某个事件(会话超时)时关闭任何活动模式的好的集中方式是什么?
我使用Angular 4
,Bootstrap 4
和ng-bootstrap
。
我在相关应用程序中使用以下库:Angular 4.x、ngrx 4.x、rxjs 5.4.x
在我的应用程序中,我能够从 websocket 获取一些数据,但对于某些数据,我必须使用 RESTful api。我正在通过 ngrx 在多个组件之间共享数据。现在我根据创建、更新和删除等事件重新获取数据。
我不希望对数据进行太多的并发修改,但我确实需要一种方法来手动或自动确保我的客户端状态与服务器匹配。我想进行修补客户端状态的乐观更新,而不是承担对相关状态片进行完整数据刷新的成本。
如果我不使用 ngrx,那么我可能只有一个服务,它会暴露一个如下所示的可观察对象,它会缓存 api 调用的最新结果并与所有订阅者共享它。它会偶尔更新结果,但前提是它有订阅者。
const interval = 1000;
let counter = 0;
// setup a timer that executes immediately and on a timer
let call = Rx.Observable.timer(0, interval)
// make the fake async call
.switchMap(() => Rx.Observable.of(counter++).delay(100))
.do(x => console.log('call', x))
// cache latest value and share the value with all subscribers
.publishReplay(1, interval)
// only connect (aka make the call) if there are more …
Run Code Online (Sandbox Code Playgroud)相关包:Angular 5.1.1、AngularCli 1.6.1
我有一个具有公共和私人方面的应用程序。私有端在认证成功后延迟加载。我有大多数模块都使用的标准核心和共享模块。我也有共享功能模块,这些模块仅由延迟加载的应用程序的私有端使用。
共享功能模块不可避免地进入公共块,因为它们被其他模块引用。共享模块也进入该块,因为它在任何地方都被引用。因为公共块包含共享模块并且共享模块被公共端引用,所以它在应用程序第一次加载时加载。因此,包含在公共块中的私有共享功能模块也在第一页加载时加载,而不是在加载使用它们的私有延迟加载功能时加载。
有没有办法使用 Angular CLI 创建多个最小的公共块?至少我想要一个公共公共块和一个私有公共块。
我有 4 个相关的 AWS 账户(服务、开发、QA、产品)。我希望服务包含 CI/CD 管道并部署到环境特定帐户。我在每个环境帐户中设置了一个 IAM 用户以用于部署。使用 AWS Amplify CLI,我可以为每个环境设置不同的配置文件,以便我可以部署到不同的账户。
这很好用,但我想使用 Amplify 控制台作为我的 CI/CD 管道。它能够为不同的分支机构设置不同的管道,并且能够将前端部署到不同的账户,但需要一个角色来部署后端。我找不到设置它的方法,以便它可以将后端部署到不同的帐户,但我对它很陌生。
现在,我将使用另一个 CI/CD 解决方案并调用 Amplify CLI 或在每个环境帐户中设置 Amplify 管道。
有没有办法设置 Amplify 控制台,以便我可以将应用程序后端部署到不同的帐户?
上下文: Angular 4.x,RxJs 5.4.x,NgRx 4.1.1.
目标:当多个组件请求相同的数据时,我希望避免重复相同的api调用.我不想取消飞行中的请求,只是在飞行中的请求完成之前不要取得未来的请求.
方法:在商店中有一个名为的标志isFetching
.在我的效果中,我检查标志,看看是否已经有飞行中的请求.如果是,那么我不提出请求.触发效果的相同操作会将isFetching
标志设置为true.
问题:在运行效果之前更新状态.因此,isFetching
发送的第一个请求之前,是真实的.所以没有发送任何请求.
示例:以下是问题的简化版本:
state.ts
export interface State {
isFetching: boolean;
}
Run Code Online (Sandbox Code Playgroud)
reducer.ts
export function reducer(state: State, action: Action): State {
switch (action.type) {
case 'FETCH':
return <State>{ isFetching: action.payload };
}
return state;
}
Run Code Online (Sandbox Code Playgroud)
effect.ts
@Effect()
public fetch: Observable<Action> = this.actions.ofType('FETCH')
.withLatestFrom(this.store.select(x => x.isFetching), (_, x) => x)
.filter(x => !x)
.switchMap(action =>
this.api.getData()
.map(data => new FetchSuccess(data))
.catch(() => Observable.of(new FetchFailure()))
);
Run Code Online (Sandbox Code Playgroud)
想法#1: …
我有一个网站,我通过CSS设置身体标签的背景图像和颜色.我使用内联样式隐藏它,display: none;
以便优化有时间运行并执行任何自定义而不会导致闪烁.这种情况一直持续到最近,当闪烁回来时,我们没有改变任何看似相关的东西.我正在调试它,并在Chrome(版本45.0.2454.101(64位))中看到,即使正文,背景图像和颜色仍然显示display: none;
.在Firefox,Safari和IE11中,不显示背景.
以下是一些代码来说明问题:
<html>
<head>
<style>.background { background-color: red; }</style>
</head>
<body class="background" style="display: none;"></body>
</html>
Run Code Online (Sandbox Code Playgroud)
我用Google搜索但无法弄清楚原因.有任何想法吗?
要明确的问题是为什么这会发生在身体标签上.我愿意采用其他方法来隐藏背景图像,但不会将它们视为答案.
我在相关应用程序中使用以下库:Angular 4.x、ngrx 4.x、rxjs 5.4.x
我有一个需要每 5 分钟轮询一次的 api。用户还可以手动刷新数据。该数据存储在 ngrx 存储中。我正在使用 ngrx 效果,因此通过调度“FETCH”类型的操作来检索数据。
我想设置一个 rxjs 流,它会将“FETCH”操作分派到 ngrx 存储。这将是一个滑动的 5 分钟计时器,当用户手动更新商店时会重置。流最初应该在订阅时发出一个值。
我不确定如何重置计时器。在普通的 javascript 中,我会执行以下操作:
console.clear();
let timer;
let counter = 0;
function fetch() {
console.log('fetch', counter++);
poll();
}
function poll() {
if (timer != null) {
window.clearTimeout(timer);
}
timer = window.setTimeout(() => {
console.log('poll');
fetch();
}, 5000);
}
function manualGet() {
console.log('manual');
fetch();
}
fetch();
Run Code Online (Sandbox Code Playgroud)
<button onClick="manualGet()">Get Data</button>
Run Code Online (Sandbox Code Playgroud)
问题:当另一个流再次像示例一样发射时,我如何在重置的间隔上发射?
我正在尝试使用 Google Cloud 部署管理器为我的 App Engine 负载均衡器创建网络端点组。我找不到它的现有资源类型,因此我尝试使用自定义类型提供程序 ( deploymentmanager.v2beta.typeProvider
)。我面临的主要问题是我想创建一个,networkEndpointType: SERVERLESS
但 API 仅支持区域性。
这是API:https://cloud.google.com/compute/docs/reference/rest/beta/networkEndpointGroups/insert
这是部署管理器脚本:
resources:
- name: network-endpoint-group
type: deploymentmanager.v2beta.typeProvider
properties:
descriptorUrl: https://www.googleapis.com/discovery/v1/apis/compute/v1/rest
options:
inputMappings:
- fieldName: name
location: PATH
methodMatch: ^(GET|DELETE|PUT|POST)$
value: $.resource.properties.name
- fieldName: Authorization
location: HEADER
value: >
$.concat("Bearer ", $.googleOauth2AccessToken())
- name: neg_create
action: {{ env["project"] }}/network-endpoint-group:compute.networkEndpointGroups.insert
properties:
name: my-network-endpoint-group
project: {{ env["project"] }}
zone: us-east1-b
appEngine:
service: my-service
networkEndpointType: SERVERLESS
metadata:
runtimePolicy:
- CREATE
dependsOn:
- network-endpoint-group
Run Code Online (Sandbox Code Playgroud)
如果我按照上面的方式运行它,那么我会得到:
SERVERLESS 类型的网络端点仅在区域中允许
如果我删除该 …
我从一个方法中得到一个对象.该对象属于object类型,由于向后兼容性,我无法更改此对象.如果它是某种类型(Response<T>
波纹管),那么我需要访问属性Payload
类型的属性,T
以便我可以将其序列化为另一个对象的一部分并将其发送出去.问题是因为我不知道T
我不能将对象转换Response<T>
为访问类型,Payload
即使我不关心它的类型.
这是我的通用类型的对象:
public class Response
{
public int Status { get; set; }
public string Message { get; set; }
}
public class Response<T> : Response
{
public T Payload { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我想做的事情:
// Will sometimes be of type Response<T>
object data = LegacyCode();
if (data.GetType().IsGenericType && data.GetType().GetGenericTypeDefinition() == typeof(Response<>)) {
var payload = ((Response<object>)data).Payload; // Unable to cast object of type...
}
Run Code Online (Sandbox Code Playgroud)
但我能找到的唯一方法是使用动力学.
// …
Run Code Online (Sandbox Code Playgroud) angular ×6
angular-cli ×3
rxjs ×3
c# ×2
ngrx ×2
angular2-aot ×1
aws-amplify ×1
css ×1
generics ×1
html ×1
javascript ×1
ng-bootstrap ×1
webpack ×1