小编vur*_*yss的帖子

Angular2 FormArray 插入不会相应地更新视图

所以我有一个包含 3 个控件的 FormGroups 的 FormArray。从视觉上看,它看起来像一个每行有 3 个输入的表格。这是它的外观:

在此处输入图片说明

我希望当用户按下 Tab 键或在行中的最后一个输入处输入时 - 在它之后添加一个新的空行。所以我添加(keydown)="addRow($event.keyCode, i)"到最后一个输入并创建了函数:

public addRow(keyCode, index)
{
    if (keyCode !== 9 && keyCode !== 13) {
        return;
    }

    let formItems = this.form.get('items') as FormArray;

    formItems.insert(
        index + 1,
        this.formBuilder.group({
            'start': ['', Validators.required],
            'title': ['', Validators.required],
            'category': [''],
        })
    );
}
Run Code Online (Sandbox Code Playgroud)

推送 FormGroup 后,我可以在表单数组中正确看到控件,但是视图更新奇怪。例如,在第一行的最后一个输入上按 Tab 后,我得到以下结果:

在此处输入图片说明

最后一行被删除,我在第一行之后得到两个空行。我不知道为什么。这是推送后的 FormArray,那里的项目正常:

在此处输入图片说明

这是视图代码:

<div formArrayName="items">
    <div *ngFor="let item of form.controls.items.controls; let i=index" [formGroupName]="i" class="row item-index-{{ i }}">
        <div class="form-group">
            <div class="col-sm-2">
                <input …
Run Code Online (Sandbox Code Playgroud)

javascript angular

4
推荐指数
2
解决办法
3322
查看次数

Angular2:如何使用自定义指令修改元素的内容?

Angular2:

我正在尝试修改innerHTML已应用自定义指令的标记的内容/ .

前言:

我正在尝试为我的项目设计一个翻译功能,它从DB中提取数据,将其加载到本地对象并更新所有翻译的对象值.首先我尝试使用管道,但除非管道不纯(性能下降) - 我无法在新翻译到达时更新值(类似这个问题).下一步是该指令,尽管它在代码中具有更大的占用空间.

我尝试了什么:

我有这样的指示:

@Directive({
    selector: '[i18n]'
})
export class I18nDirective
{
    @Input() set i18n(key: string) {
        this.el.nativeElement.innerHTML = Translations.get(key);
        this.viewContainer.element.nativeElement.innerHTML = Translations.get(key);
        this.templateRef.elementRef.nativeElement.innerHTML = Translations.get(key);
        this.renderer.setElementProperty(this.el.nativeElement, 'innerHTML', Translations.get(key));
        this.renderer.setElementProperty(this.viewContainer.element.nativeElement, 'innerHTML', Translations.get(key));
        this.renderer.setElementProperty(this.templateRef.elementRef.nativeElement, 'innerHTML', Translations.get(key));

        this.viewContainer.createEmbeddedView(this.templateRef);
    }

    public constructor(
        private el: ElementRef,
        private templateRef: TemplateRef<any>,
        private viewContainer: ViewContainerRef,
        private renderer: Renderer,
    ) { }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了上述所有设置变量的指令下的标签内容,但没有任何成功.

这是标签:

<span class="..." *i18n="'translation-page-title'"></span>
Run Code Online (Sandbox Code Playgroud)

如何动态更改包含指令的标记的innerHTML?并且可能在语言改变时动态地改变它?

提前致谢!

internationalization typescript angular

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