小编Det*_*iel的帖子

Recaptcha v2在重置时会抛出错误,并且从DOM中删除其容器元素

当我显式渲染Recaptcha v2然后在从DOM中删除它之前重置它,大约40秒后我在浏览器控制台中出错.

我有一个可以用来重现问题的JSFiddle.

这是相关的代码摘录:

const recaptchaHolder = document.getElementById('...');
const recaptchaWidgetId = grecaptcha.render(recaptchaHolder, {/*...*/});
// then later
grecaptcha.reset(recaptchaWidgetId);
recaptchaHolder.parentElement.removeChild(recaptchaHolder);
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

未知(承诺)超时

使用以下stacktrace(实际的堆栈跟踪可能会有所不同,因为它发生在严重缩小的代码中):

setTimeout (async)      
J           @   recaptcha__en.js:100
(anonymous) @   recaptcha__en.js:285
tb          @   recaptcha__en.js:284
mj          @   recaptcha__en.js:456
(anonymous) @   recaptcha__en.js:458
Run Code Online (Sandbox Code Playgroud)

我试图利用文档中'error-callback'参数来捕获此错误,但这没有帮助 - 错误仍未被捕获,并且不会调用此回调.

另一个观察:如果我grecaptcha.reset在从DOM中删除元素之前省略调用,则不会发生错误.但是,它可能会导致UI不一致:如果用户受到recaptcha的挑战(例如,使用图像),并且只是从DOM中删除元素而不调用grecaptcha.reset,则不会从DOM中清除挑战HTML.

我正在寻找处理上述错误或以不同方式处理recaptcha删除的方法(如果我现在做错了)

javascript recaptcha

13
推荐指数
1
解决办法
1130
查看次数

如何使Angular 2拾取动态添加routerLink指令

正如在这个plunker中所看到的,我正在动态地向我的一个元素添加一个HTML,其归结为:

@Component({
    selector: 'my-comp',
    template: `<span [innerHTML]="link"></span>`,
}) export class MyComponent {
    private linkContent = '<a routerLink="/my-route">GoTo Route</a>';
    private link;

    constructor(sanitizer: DomSanitizer) {
        this.link = sanitizer.bypassSecurityTrustHtml(linkContent);
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致<a routerLink="/my-route">GoTo Route</a>被添加到DOM中,但Angular routerLink对该元素的指令一无所知,也没有"绑定"它.因此,当您单击该链接时,它会导致完全重新加载并重新引导(在plunk中不起作用,它只给出404).

问题:如何告诉角度通过DOM(或其部分,甚至是单个元素)并在需要时执行组件初始化?

typescript angular2-directives angular2-routing angular

8
推荐指数
1
解决办法
2129
查看次数

c# - 从属性构造函数中抛出异常

我找到了关于这个主题的这篇文章并尝试了以下内容:

public class FailerAttr : Attribute {
    public FailerAttr(string s) {
        throw new Exception("I should definitely fail!");
    }
}
Run Code Online (Sandbox Code Playgroud)

在单元测试项目中,我有以下内容:

using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class Test {
    [TestMethod]
    public void GoFail() {
        // Make sure attribute will get initialized
        new Failer();
    }

    private class Failer {
        [FailerAttr("")]
        public int Prop { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,它会成功.所以,问题是:

  1. 为什么不失败?
  2. 从属性中抛出异常真是个坏主意吗?因为我认为我需要.

一些环境信息(以防万一相关):

  • 单元测试通过ReSharper的单元测试运行器(R#v8.2.0.2160)运行
  • Visual studio v11.0.61030.0

c# exception custom-attributes

7
推荐指数
2
解决办法
3699
查看次数

Git Bash无法将目录更改为文档文件夹

我正在尝试关注这个Github教程:https://www.youtube.com/watch?v = 73I5dRucCds 当我尝试将目录更改为我的桌面时,我在我的Git Shell中得到了这个:

Natha_000@idea-PC MINGW64 ~ 
$ cd /desktop
bash: cd: /desktop: No such file or directory

Natha_000@idea-PC MINGW64 ~
$ cd /Desktop
bash: cd: /Desktop: No such file or directory

Natha_000@idea-PC MINGW64 ~
$ cd Desktop
bash: cd: Desktop: No such file or directory

Natha_000@idea-PC MINGW64 ~
$ cd Documents
bash: cd: Documents: No such file or directory

Natha_000@idea-PC MINGW64 ~
$ cd /c/Desktop
bash: cd: /c/Desktop: No such file or directory

Natha_000@idea-PC MINGW64 …
Run Code Online (Sandbox Code Playgroud)

git

7
推荐指数
2
解决办法
2万
查看次数

当没有结果返回时,如何防止Angular异步管道频繁进行服务器调用?

async在ngFor中使用管道来观察Observable.Observable由访问我的服务器的服务创建,并且在枚举ngFor循环时的加载时间,服务正确地调用服务器.

现在对于我不理解的部分:当任何结果回来时,一切都按预期发生.但是,如果服务器响应说,404,并且没有可用于枚举的结果,则async管道会使服务继续触发请求,相隔毫秒.这显然不好.这里的设计期望是什么?如何优雅地处理在使用异步管道时返回错误的Observable?

在组件模板中:

<li *ngFor="let person of persons | async">{{person.id}}</li>
Run Code Online (Sandbox Code Playgroud)

在Component主体中:

get persons: Observable<Person[]> {
    return this.personService.list();
}
Run Code Online (Sandbox Code Playgroud)

在服务中:

list(): Observable<Person[]> {
    if (this.persons && this.persons.length) {
        return Observable.from([this.persons]);
    } else {
        return this.http.get('/person')
            .map((response: Response) => response.json())
            .map((data: Person[]) => {
                this.persons = data;
                return data;
            })
            .catch((error: any) => {
                let errMsg = "some error..."
                return Observable.throw(errMsg);
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

typescript angular

7
推荐指数
1
解决办法
3999
查看次数

Angular 2:如何在追加到DOM后呈现动态创建的组件

首先,Plunker中提供了所有代码.

一些代码

我有一个根Angular2组件,如下所示:

import {Component} from '@angular/core'

@Component({
  selector: 'my-app',
  template: `
    <h2>Angular2 Root Component</h2>
    <div data-dynamic-content></div>
  `,
})
export class App {}
Run Code Online (Sandbox Code Playgroud)

[data-dynamic-content]元素是我将在运行时添加的组件的占位符.这些组件也是动态的,创建如下:

import {Component} from '@angular/core'

export function createComponent(selector: string, value: string) {
  @Component({
    selector: selector, 
    template: `<h4>Dynamic Component: {{v}}</h4>`,
  })
  class MyDynamicComponent {
    v = value;
  }

  return MyDynamicComponent;
};
Run Code Online (Sandbox Code Playgroud)

请记住,这是一个极其简化的例子.

问题陈述

我想创建不同的表示形式MyDynamicComponent,将它们附加到[data-dynamic-content]元素树中,并使它们具有全部功能.

我试过的

到目前为止唯一有效的方法是在追加到DOM时引导新创建的组件:

import {bootstrap} from '@angular/platform-browser-dynamic';
import {createComponent} from './my-dynamic.component';

export function addComponentDynamically(selector, value) …
Run Code Online (Sandbox Code Playgroud)

typescript angular

5
推荐指数
0
解决办法
4271
查看次数

如何配置 ESLint 以禁止默认导出

我一直在网上和 StackOverflow 上搜索这个,但没有成功。

我正在尝试让 ESLint 将以下内容标记为错误:

export default ...;
Run Code Online (Sandbox Code Playgroud)

default是这里的关键。到目前为止,我得到的最好的是对eslint-plugin-import插件及其一些规则的引用,这些规则可以让我更接近目标,即无匿名默认导出规则。但即使使用此规则,以下默认导出也是有效的:

const foo = 123
export default foo

export default class MyClass() {}

export default function foo() {}
Run Code Online (Sandbox Code Playgroud)

如何配置 ESLint 使这四个也被视为错误?

javascript eslint

5
推荐指数
3
解决办法
3731
查看次数

使用block:将对象初始化编译成try块

在我的项目中,我有一个构造函数可以抛出的对象.所以我正在使用的代码如下:

MyObject obj = null;
try
{
    obj = new MyObject();
    obj.DoSomething();
}
finally
{
    if (obj != null)
        obj.Free();
}
Run Code Online (Sandbox Code Playgroud)

正如在C#使用"使用"一样,代码就像

using (MyObject obj = new MyObject())
{
    obj.DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

由.NET CLR转换为

{
    MyObject obj = new MyObject();
    try
    {
        obj.DoSomething();
    }
    finally
    {
        if (obj != null)
            ((IDisposable)obj).Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:我可以以某种方式使CLR将对象的构造函数放入try块中吗?

c# clr using try-finally

3
推荐指数
1
解决办法
301
查看次数