我正在使用DI在Play 2.5中访问我的App:
import com.google.inject.{Inject, Provider}
import play.api.mvc._
import play.api.Application
class ApplicationController @Inject()(p: Provider[Application]) extends Controller {
implicit lazy val app = p.get()
println(app.hashCode()+"") // Random line to use the injected app
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ProvisionException: Unable to provision, see the following errors:
1) Tried proxying play.api.Application to support a circular dependency, but circular proxies are disabled. ...
Run Code Online (Sandbox Code Playgroud)
我浏览了Play迁移指南:https://www.playframework.com/documentation/2.5.x/Migration25#Handling-legacy-components
并按照他们所说的那样做以避免循环依赖,但是我仍然遇到该错误。
我还发现了一个我目前未使用的名为disableCircularProxies的变量(http://google.github.io/guice/api-docs/latest/api-diffs/changes/docdiffs_com.google.inject.html)我不确定该怎么做,因此几乎找不到相关信息。
任何想法如何解决这个循环依赖错误?
这是完整的堆栈跟踪:
Tried proxying play.api.Application to support a circular dependency, but circular proxies are disabled.
at …Run Code Online (Sandbox Code Playgroud) 我想直接用特定的端口号启动sbt:
sbt run 9001
Run Code Online (Sandbox Code Playgroud)
不起作用,因为9001被忽略.
但是,首先启动sbt然后使用该命令run 9001
我怎样才能在一个命令行中直接组合我可以在shell中运行?
我的应用程序完成得益于Angular 2,并且适用于所有浏览器.但是,在IE上加载速度相当慢(10和11,我不支持下面).例如,在Safari,Chrome和Firefox上加载需要约1.5秒,在IE上需要超过5秒(在Edge上需要10秒).我查看了网络选项卡,发现有时它在两次调用之间有一个间隙(0.5到1秒):

知道什么可以延迟两次通话之间的IE?
我唯一的领导可能是我的index.html中的垫片排序:
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>AGA Front App</title>
<script src='@routes.Assets.versioned("lib/angular2/es6/dev/src/testing/shims_for_IE.js")'></script>
<script src='@routes.Assets.versioned("lib/es6-shim/es6-shim.min.js")'></script>
<script src='@routes.Assets.versioned("lib/systemjs/dist/system.src.js")'></script>
<script src='@routes.Assets.versioned("lib/typescript/lib/typescript.js")'></script>
<script src='@routes.Assets.versioned("lib/angular2/bundles/angular2-polyfills.js")'></script>
<script src='@routes.Assets.versioned("lib/rxjs/bundles/Rx.js")'></script>
<script src='@routes.Assets.versioned("lib/angular2/bundles/angular2.js")'></script>
<script src='@routes.Assets.versioned("lib/angular2/bundles/http.js")'></script>
<script src='@routes.Assets.versioned("lib/angular2/bundles/router.dev.js")'></script>
<script src='@routes.Assets.versioned("systemjs.config.js")'></script>
<script>
System.import(path + '/assets/app/bootstrap.ts')
.catch(console.error.bind(console));
</script>
Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关closuresJS的文章。我已经浏览过各种指南,例如https://medium.freecodecamp.org/javascript-closures-simplified-d0d23fa06ba4
我仍然有一个问题。闭包是否仅引用一阶函数(返回函数的函数)。或者,是否有任何功能closure?我真正看到的唯一区别是某些函数没有嵌套,这3个作用域链(外部函数的作用域)之一将是空的,但它仍然不存在。
我想创建并返回已经解决的(如果你愿意,假的)promise2中的Promise.在angularjs中你会做类似的事情:return $q.defer().promise
我正在考虑这样做:return new Observable<any>.toPromise()
但我不确定这是否是正确的方法.
我做了这个小小的发光动画:
@include keyframes(teal-glowing) {
0% { background-color: $teal; -webkit-box-shadow: 0 0 3px $teal; }
50% { background-color: rgba(3,173,172,0.83); -webkit-box-shadow: 0 0 7px rgba(3,173,172,0.83); }
100% { background-color: $teal; -webkit-box-shadow: 0 0 3px $teal; }
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否可以做一个通用的,只是给它我作为参数的颜色.而不是创建的teal-glowing,green-glowing...
我正在使用Angular的2.4.9版本.我想声明一个我可以在几个地方使用的html元素:
<div #template>
foo
</div>
<header>
{{ template }}
</header>
<body>
{{ template }}
</body>
Run Code Online (Sandbox Code Playgroud)
它显然不起作用,解决方案是创建一个组件.我在angular4中看到ng-template确实存在某些调用.角度2.4.X有什么相似之处吗?
我的组件中有以下构造函数:
constructor (private el: ElementRef) {this.el = el.nativeElement}
Run Code Online (Sandbox Code Playgroud)
然后在我的ngOnInit:
ngOnInit() {
let foos = this.el.getElementsByClassName('foo')
}
Run Code Online (Sandbox Code Playgroud)
触发器: TS2339: Property 'getElementsByClassName' does not exist on type 'ElementRef'.
我确实尝试过将我转换ElementRef为一个HTMLElement没有任何成功.知道如何处理这个错误吗?
在这里,我编写的拦截器直接通过拦截器处理微调器
@Injectable()
export class ApiInterceptor implements HttpInterceptor {
constructor(private _globalSpinnerService: GlobalSpinnerService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const spinnerParam: string = req.params.get("spinner")
let handleObs: Observable<HttpEvent<any>> = next.handle(req)
if(spinnerParam) {
this._globalSpinnerService.spinner = true
handleObs.toPromise().then(() => {
this._globalSpinnerService.spinner = false
})
}
return handleObs
}
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作。但是,我现在看到我所有涉及微调器的请求都发送了两次。所以我想我删除微调器的方法不是最干净的。手柄结束后,如何告诉我的拦截器取下旋转器?
编辑:
我通过更换我改变了代码handleObs.toPromise().then通过handleObs.do()和它现在工作的罚款。我只是不确定为什么
我目前正在学习C++的基础知识,我发现了以下代码:
#include <iostream>
using namespace std;
class MyClass {
int x;
public:
MyClass(int val) : x(val) {}
int& get() {return x;}
};
int main() {
MyClass foo (10);
foo.get() = 15;
cout << foo.get() << '\n';
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这条线foo.get() = 15有效.对我来说,它看起来像是一个同时获得和设置.我想这是有效的,因为返回类型int&不仅仅是int.
有人可以向我解释它是如何工作的吗?
谢谢.
angular ×5
javascript ×2
typescript ×2
c++ ×1
closures ×1
css ×1
html ×1
sass ×1
sbt ×1
scala ×1