请向我解释为什么我一直收到这个错误: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
显然,我只是在开发模式下获得它,它不会在我的生产版本中发生,但它非常烦人,而我根本不理解在我的开发环境中出现错误的好处 - 不会出现在prod上 - - 可能是因为我缺乏理解.
通常,修复很容易,我只是将错误导致代码包装在setTimeout中,如下所示:
setTimeout(()=> {
this.isLoading = true;
}, 0);
Run Code Online (Sandbox Code Playgroud)
或者使用如下构造函数强制检测更改constructor(private cd: ChangeDetectorRef) {}::
this.isLoading = true;
this.cd.detectChanges();
Run Code Online (Sandbox Code Playgroud)
但为什么我经常遇到这个错误?我想了解它,以便将来可以避免这些hacky修复.
我正在使用 Angular Universal 创建一个网站。它将进行服务器端渲染,以便搜索引擎可以对其进行索引。
我已经编码了 404 后备路由,它正确显示了其组件,但它显示了 HTTP 200 标头代码。
如何强制使用特定的标头代码?我用谷歌搜索了一些查询,但我发现的所有内容似乎都是关于读取HTTP 调用的状态代码,而没有关于如何将其写入浏览器的内容。
我刚刚将我的 Angular 应用程序升级到版本 5,效果很好。然而,一旦我升级了其他一些东西(比如@angular/cdk、@angular/material、typescript),我就不得不修复升级带来的一堆错误。当我运行ng serve或ng build --prod(JIT 和 AOT 构建)时,一切看起来都很棒——终端中没有任何错误,应用程序构建成功。然后应用程序localhost:4200按预期运行,但应用程序似乎没有启动,浏览器控制台中根本没有打印任何内容。
我可以做些什么来解决问题?我没有任何错误可以查看,我觉得我只需要猜测出了什么问题。
有什么建议?
我可以从 angular 应用程序中访问以下路径(通过单击具有 routerLink 的产品链接):
{basePath}/product/trek-monda-slr-frameset-(h2-fit)-2016
Run Code Online (Sandbox Code Playgroud)
但是,一旦我刷新页面 angular 就会在控制台中引发错误并且不会提供页面:
Uncaught (in promise): Error: Cannot match any routes. URL Segment: 'h2-fit'
Run Code Online (Sandbox Code Playgroud)
我的猜测是角度路由器不允许括号。但是对于大多数浏览器来说,url 中的括号不是有效字符吗?
为什么 Angular 不允许这样做?
是否有一种干净的方法可以将当前可选的 queryParams 与模板中链接上的附加可选 queryParam 合并?
当前网址:/search;brand=Trek
所需的转到链接:/search;brand=Trek;start=1(startCount 将递增)
我知道 Angular 支持合并普通queryParams 的功能(https://angular.io/docs/ts/latest/api/router/index/RouterLink-directive.html),但我认为它不适用于可选的queryParams。
这就是为什么这不起作用:
<a class="nav-btn"
queryParamsHandling="merge"
[routerLink]="[ { start: startCount+1 } ]">
Next Page
</a>
Run Code Online (Sandbox Code Playgroud)
有什么建议么?
使用默认视图封装(模拟)在浏览器开发工具中为组件设置样式的最有效方法是什么?
我当前的工作流程涉及从开发工具中进行大量繁琐的复制和粘贴,如下所示:
Chrome开发工具能够将DOM上的样式更改保存到源css文件(使用工作区保存更改到磁盘),但我不知道这是否适用于Angular和Webpack使用模拟组件样式的方式.
必须有比我目前更快的工作流程.有小费吗?
css google-chrome-devtools visual-studio-code angular-cli angular
我知道当canActivate函数返回一个简单的时boolean,角度路径保护以指定的顺序执行,但是,如果守卫返回类型Observable<boolean>或Promise<boolean>?
路线示例:
{
path: 'confirm',
canActivate: [AuthGuard, SessionExpiredAuthGuard, CheckoutAuthGuard],
component: CheckoutReviewOrderComponent
},
Run Code Online (Sandbox Code Playgroud)
SessionExpiredAuthGuard和CheckoutAuthGuard都返回类型Observable<boolean>.我不希望在SessionExpiredAuthGuard完成从异步http请求中检索数据之前执行CheckoutAuthGuard.
有没有办法强制这些异步防护按顺序执行?
我正在尝试确定是否可以使用 AmazonSQSClient 获取 AWS FIFO 队列组中的消息数(具有特定 MessageGroupId 的消息)。
我已经看过一些文档: https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/SQS/TSQSClient.html
文档暗示我也许可以使用 GetQueueAttributes 方法做我想做的事情......尽管还不清楚。我想在 Lambda 函数中执行此操作。
这可能吗?
我的应用程序中有一些繁重的javascript代码,它正在阻碍UI,使其感觉低于60fps(janky).
我想利用网络工作者而不会失去角度cli的舒适度(我不想跑ng eject).理想情况下,我的整个应用程序将在Web worker中运行.
这目前可能吗?
前提条件:
我知道客户聊天插件仅处于测试模式,但如果可以的话我很想使用它。查看文档后,我似乎找不到自定义聊天小部件功能的方法。
这就是我想做的:
背景:
网站是卖家的市场,我希望能够为他们提供个人聊天功能,将消费者与卖家联系起来。
之前的尝试:
#fb-root通过定位和应用display: none;或来隐藏和显示小部件display: block;。这工作正常,但仍然很老套,并且不能解决知道何时触发隐藏和显示的问题(通常在按钮上单击“立即聊天”,但我也希望小部件在关闭/最小化时隐藏)。index.html(头部内部):
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'first-app-id',
autoLogAppEvents : true,
xfbml : true,
version : 'v2.12'
});
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'second-app-id',
autoLogAppEvents …Run Code Online (Sandbox Code Playgroud) angular ×8
angular-cli ×3
amazon-sqs ×1
angular-aot ×1
c# ×1
css ×1
facebook ×1
seo ×1
web-worker ×1