小编yan*_*kee的帖子

动态创建具有ng-content的angular2组件

我想设置<ng-content>动态实例化组件的主体ComponentFactoryResolver.

我看到我可以使用输入和输出访问ComponentRef,但不能设置<ng-content>.

请注意<ng-content>我计划设置可以包含简单文本/可以跨越动态创建的组件

@Component({
    selector: 'app-component-to-project',
    template: `<ng-content></ng-content>`
})
export class ComponentToProject implements AfterContentInit {

    ngAfterContentInit() {
        // We will do something important with content here
    }

}


@Directive({
    selector: 'appProjectionMarker'
})
export class ProjectionMarkerDirective implements OnInit {

    constructor(private viewContainerRef: ViewContainerRef, private componentFactoryResolver: ComponentFactoryResolver) {
    }

    ngOnInit() {
        const componentFactory: ComponentFactory<ComponentToProject> = this.componentFactoryResolver.resolveComponentFactory(ComponentToProject);
        const componentRef: ComponentRef<ComponentToProject> = this.viewContainerRef.createComponent(componentFactory);
        // Question: How to set content before the child's afterContentInit is invoked …
Run Code Online (Sandbox Code Playgroud)

angular-components angular

12
推荐指数
1
解决办法
6924
查看次数

Javascript单击多个元素上的事件侦听器并获取目标ID

我有一个javascript文件,在带有<article>标记的每个元素上设置一个'click'的EventListener .我希望在事件触发时获得点击文章的ID.出于某种原因,我的代码什么都没有!

我的javascript:

articles = document.getElementsByTagName('article');
articles.addEventListener('click',redirect(e),false);
function redirect(e){
alert(e.target.id);
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?BTW我的文章设置是在窗口加载时调用的函数,我知道这是有效的,因为该函数有其他功能.


编辑

所以我修复了我的代码,所以它将循环并将监听器添加到每个文章元素,现在我得到一个没有任何内容的警报框.当尝试输出没有ID的e.target时,我会为每个元素获得以下消息:

[object HTMLHeadingElement]
Run Code Online (Sandbox Code Playgroud)

有什么建议?


另一个编辑

我目前的javascript代码:

function doFirst(){
articles = document.getElementsByTagName('article');
for (var i = 0; i < articles.length; i++) {
    articles[i].addEventListener('click',redirect(articles[i]),false);
}
}

function redirect(e){
alert(e.id);
}
window.addEventListener('load',doFirst,false);
Run Code Online (Sandbox Code Playgroud)

这是在页面完成加载时显示我的警告框,而没有考虑到我没有点击该死的东西:O

javascript html5 onclick

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

如何在rebase期间为所有提交运行测试

我有一个功能分支,有很多提交.

A---B---C     master
 \
  \-B'---C'---D'...---Z'  feature
Run Code Online (Sandbox Code Playgroud)

我正在努力,feature但另一个开发人员创建了提交BC.现在我想feature在提交时重新定义C,但是我和/或automerge在rebase期间引入了错误.我的项目具有非常好的测试覆盖率,我可以使用控制台运行测试ant rebuild test,现在我希望git告诉我哪个提交是第一次破坏我的测试的提交,所以我可以修复该提交.我怎样才能做到这一点?

git rebase

10
推荐指数
2
解决办法
1947
查看次数

可以使用ThreadLocal存储请求的Locale吗?

我正在努力将用户输入的数据国际化到一个相当大的客户端/服务器(HTTP(Hessian)用于通信)应用程序中,该应用程序存储在数据库中.用户可以选择他们想要查看的语言,并且在没有所请求语言的翻译时使用默认语言.

目前,数据类可能如下所示:

class MyDataClass {
  private Long id;
  private String someText;
  /* getters and setters */
}
Run Code Online (Sandbox Code Playgroud)

国际化后,它可能如下所示:

class MyDataClass {
  private Long id;
  private Set<LocalizedStrings> localizedStrings;
  /* getters and setters */
}
class LocalizedStrings {
  private Locale locale;
  private String someText;
  /* getters and setters */
}
Run Code Online (Sandbox Code Playgroud)

当然,在MyDataClass中创建一个委托getter可能会很有趣,它负责以正确的语言环境获取文本:

public String getSomeText(Locale locale) {
  for(LocalizedString localized : localizedStrings) {
    if (localized.getLocale().equals(locale)) {
      return localized.getSomeText();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的团队中,虽然需要一直传递语言环境直到它们到达数据类,但仍然存在一些问题.由于所有这些事情都发生在服务器上,并且每个对服务器的请求都是在专用线程中处理的,因此有人建议将请求的区域设置存储在ThreadLocal对象中并创建向后兼容的无参数getter:

public String getSomeText() {
  return getSomeText(myThreadLocalLocale.get());
}
Run Code Online (Sandbox Code Playgroud)

然后ThreadLocal需要是一个全局变量(静态的某个地方),或者需要在每个单独的实例创建时注入MyDataClass(我们使用spring,所以如果我们对数据类进行Spring管理,我们可以注入它(感觉错误)我)).

对于我来说,使用ThreadLocal对于语言环境感觉不对.我可以模糊地说,我不喜欢getter中的隐形魔法和全局变量的依赖(在数据类中!).然而,对此有一种"不好的感觉"并不是与同事争论它的好方法.为了帮助我需要以下其中一个答案:

  1. 告诉我,我的感觉很糟糕,解决方案非常适合X,Y和Z的原因.
  2. 给我一些很好的引用论据,我可以用它来与同事争论并告诉我如何更好地做到这一点(只是总是传递语言环境或任何其他想法?)

java thread-local

9
推荐指数
1
解决办法
1773
查看次数

JIT可以从泛型中获益吗?

众所周知,泛型类型在编译过程中无法存在.他们被类演员取代.

但是,类型信息存在于类文件中,可以使用反射查看:

public class Demo
{
    private List<String> list;

    public Demo() throws SecurityException, NoSuchFieldException
    {
        System.out.println(((Class<?>)((ParameterizedType) getClass().getDeclaredField("list").getGenericType()).getActualTypeArguments()[0]).getName());
    }

    public static void main(String[] args) throws SecurityException, NoSuchFieldException
    {
        new Demo();
    }
}
Run Code Online (Sandbox Code Playgroud)

执行时,将打印java.lang.String.

JIT可以将它用于某种优化吗?或者从JIT的角度来看这些信息是无用的?

java optimization jit

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

如何在自然模板处理代码重复(例如Thymeleaf)?

Thymeleaf非常强调"自然模板",这意味着所有模板都是有效的XHTML文件.我一直认为这是向前迈出的一大步,我可以在我的模板中生成片段,例如在我写的JSP中

<tagfile:layout title="MyPageTitle">
  <jsp:body>
     Main content goes here
  </jsp:body>
</tagfile:layout>
Run Code Online (Sandbox Code Playgroud)

我的"布局"-Tagfile包含所有标题标签(标题,样式表链接......),菜单和justs在正确的位置插入标题文本和正文.在设计我的html fragement时,我不需要了解样式表菜单等.

这与Thymeleaf的想法形成对比,Thymeleaf鼓励我创建完整的html页面(包括示例菜单和所有标题).虽然Thymeleaf的手册继续强调这是多么伟大,但它从不处理代码重复问题:

  • 我有一个生成菜单的模板,所有其他模板(可能很多)都包含一个复制和粘贴的虚拟菜单,这样我就可以在没有服务器端生成机制的情况下在浏览器中查看模板.如果我有100个模板,这意味着可能完全相同的虚拟菜单存在100x(在每个模板中).如果我改变了菜单的外观,那就不是创建一个新的虚拟菜单了,但是我需要将新的虚拟菜单复制并粘贴到100个模板中.
  • 即使我决定做一些像重命名我的CSS文件一样简单的事情,我也需要触摸我的所有模板.
  • 总是存在我的模板在我的浏览器中看起来很好的危险,但是生成的输出被打破了因为......好吧......我打破了它(可能就像拼写错误的变量名一样简单).因此,无论如何,我将需要用实际生成来测试输出.

我误解了那里的东西吗?或者这确实是一种权衡吗?如何最大限度地减少代码重复的影响?

template-engine thymeleaf

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

配置Spring Security为REST URL返回403,并重定向到其他URL的登录

我的Web应用程序有一堆"普通"资源(html页面等)以及一些REST资源,这些资源是由前面提到的html页面从JavaScript调用的.

如果存在会话超时,则用户将被重定向到登录表单.这对于"普通"资源来说非常好,但对于REST资源则不然.我只需要403响应,以便JavaScript可以接管并要求用户重新进行身份验证.

网上有无数的例子如何配置每一个,但我找不到一个如何组合方法的例子.我的所有API网址都以"/ api /"开头,因此我需要所有这些网址的403以及所有剩余网址的重定向.我该如何设置?

spring-security

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

如何使用基于Scope的@PreAuthorize来保护spring-security-oauth资源?

我成功配置了spring-security-oauth2,以便外部应用程序可以使用我的应用程序进行身份验证.但是,基于外部应用程序并基于用户允许的内容,客户端只能访问我的API的一部分.可用子集由OAuth Scopes确定.

在经典的Spring应用程序中,我可以使用@PreAuthorize来强制基于角色的边界:

@Controller
public class MyController {
  @PreAuthorize("hasRole('admin')")
  @RequestMapping("...")
  public String doStuff() {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

使用OAuth和Scopes而不是角色时,我该怎么做?

java spring spring-security-oauth2

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

百万美元可以安全地与用户提供的模板一起使用吗?

在SaaS应用程序中,我有一些模板用于生成通知电子邮件或某些HTML页面.到目前为止,我还没有使用百日咳,到目前为止所有模板都是硬编码的,但我很乐意改变它,以便应用程序的用户可以自己编辑这些模板.问题是,如果我允许用​​户自己编辑模板,用户可能会调用任何Java方法,这将完全损害系统安全性.

百万美元可以"沙盒化"还是可以禁用在用户编辑模板环境中危险的所有功能?(为了执行,模板只接收带有getter和setter或java.util.Map的POJO,因此在模型上调用方法不是问题)

我尝试了什么

最明显的问题是OGNL/SpringEL.这些表达的力量可能很大,但它们也非常危险.我只需要从模型中调用getter.所以我试着像这样实现我自己的表达式解析器(以下只是一些快速和脏的概念证明,它不是"完成"):

final TemplateEngine templateEngine = new TemplateEngine();
final StandardDialect dialect = new StandardDialect();
dialect.setExpressionParser(new IStandardExpressionParser() {
    @Override
    public IStandardExpression parseExpression(final IExpressionContext context, final String input) {
        if (!input.startsWith("${") || !input.endsWith("}")) {
            throw new IllegalArgumentException("Only variable expressions allowed, not " + input);
        }
        final String[] path = StringUtils.split(input.substring("${".length(), input.length() - "}".length()), '.');
        return new IStandardExpression() {
            @Override
            public String getStringRepresentation() {
                return "Variable " + Arrays.toString(path);
            }

            @Override
            public Object execute(final IExpressionContext context) {
                Object result = context.getVariable(path[0]); …
Run Code Online (Sandbox Code Playgroud)

thymeleaf

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

如何组合angularjs和xhtml?

下面是angularjs的最小示例示例,保存为angular.html:

<!DOCTYPE html>
<html lang="en" xmlns:ng="http://angularjs.org" ng:app="">
<head>
  <title>My HTML File</title>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>
</head>
<body>

  <p>Nothing here {{'yet' + '!'}}</p>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但是我坚信XML,我喜欢创建符合XML标准的所有html文档.我尝试调整示例并将其保存为angular.xhtml:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:ng="http://angularjs.org" ng:app="">
<head>
  <title>My HTML File</title>
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js" />
</head>
<body>

  <p>Nothing here {{'yet' + '!'}}</p>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

最大的变化是xhtml-Namespace和文件扩展名".xhtml".没有任何错误或任何错误.只是页面显示为好像没有角度.

如何让angularjs使用符合XML的文件?

angularjs

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