标签: angular2-template

将模板添加为innerHTML 时,Angular 2 绑定/事件不起作用

我正在尝试创建一个可配置的可重用表。单元格可以配置为具有 html 模板。

我正在配置“ Review ”列,使其具有带有带有点击事件的锚标记的 html 模板(review(row))。

到目前为止,我尝试将此模板作为innerHTML 插入,但所有角度绑定都不起作用。然后我尝试创建一个动态调用的组件(review.component.ts),但该组件仅在第一行调用一次。此外,我没有找到任何方法将当前行项目传递给单击事件 review(row) (在 review.component.ts 内)。

雇员.组件.ts:

import { Component, OnInit, DynamicComponentLoader, ElementRef, Inject, Injector} from '@angular/core';
import { CORE_DIRECTIVES } from '@angular/common';
import {Router, RouteConfig, RouterLink, RouterOutlet, ROUTER_PROVIDERS, ROUTER_DIRECTIVES} from '@angular/router-deprecated';
import {DataTableComponent} from '../../data_table/data_table.component';
import {DataTable} from '../../data_table/dataTable';
import {Cell} from '../../data_table/cell';
import {ReviewComponent} from './review.component';

@Component({
    selector: 'employee',
    templateUrl: './app/employee/employee.html',
    directives: [DataTableComponent, ReviewComponent, RouterLink, RouterOutlet, ROUTER_DIRECTIVES],
    providers: [ROUTER_PROVIDERS]
})

export class EmployeeComponent implements OnInit {
    public tableConfig: DataTable;
    public …
Run Code Online (Sandbox Code Playgroud)

javascript angular2-template angular

4
推荐指数
1
解决办法
3091
查看次数

输入更改时不调用子组件内的管道

我有一个自定义管道来过滤数组。管道用于子组件内部,数据通过输入参数传递到子组件。当输入数据改变时,管道不会被调用。在子组件中使用 ChangeDetectionStrategy.OnPush 时,我需要做些什么不同的事情吗?

编辑

在下面的示例中,product-list-container 从 ngrx 商店获取产品。数据通过输入参数传递到产品列表组件。

在产品列表组件中,我有一个过滤器,用于根据某些条件过滤掉行。我看到的问题是,当输入值更改时,不会调用管道函数。Pipe 在组件加载时仅被调用一次。

@Component({
  selector: 'product-list-container',
  template: `
    <app-product-list [productList]="productList$ | async"></app-product-list>
  `
})
export default class ProductListContainer implements OnInit {
  public productList$: Observable<Product[]>;
  constructor(public store: Store<AppState>) {
  }
  ngOnInit() {
    this.productList$ = this.store.select('productList');
  }
}

@Component({
  selector: 'app-product-list',
  template: `
    <div *ngFor="let product of productList | filterActiveProduct">
   // More code here 
    </div>
  `,
  changeDetection: changeDetectionStrategy.onPush
})
export default class ProductList {
  @Input() productList: Product[];
  constructor() {
  }
}

@Pipe({
  name: 'fromNow'
}) …
Run Code Online (Sandbox Code Playgroud)

angular2-template angular

4
推荐指数
1
解决办法
2964
查看次数

ng-content:嵌入容器元素的内容,而不是元素本身?

我有一个基于 Bootstrap 的模式对话框组件,具有三个主要子元素:标题、摘要页脚

import { Component, Input } from '@angular/core';

@Component({
  selector: 'modal',
  template: `<div class="modal fade" tabindex="-1" role="dialog">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title"><ng-content select="header"></ng-content></h4>
      </div>
      <div class="modal-body">
        <ng-content select="summary"></ng-content>
      </div>
      <div class="modal-footer">
        <ng-content select="footer"></ng-content>
      </div>
    </div>
  </div>
</div>`
})
export class ModalComponent {
}
Run Code Online (Sandbox Code Playgroud)

目的是简化 Bootstrap 样板:

<modal>
  <header>Hello world!</header>
  <summary>A  message</summary>
  <footer>Dialog footer</footer>
</modal>
Run Code Online (Sandbox Code Playgroud)

不幸的是,包含元素(headerSummaryfooter)也包含在“嵌入”中,这违反了 Bootstrap 格式。我可以只嵌入容器节点的内容吗?

angular2-template angular

4
推荐指数
1
解决办法
3315
查看次数

*ngIf行为:如何有条件地以角度2显示数据?

这是show-data组件:

@Component({
    selector: 'show-data',
    template: `yes! Now showing the show-data directive template !`
})
export class ShowData {}
Run Code Online (Sandbox Code Playgroud)

而它的父母:

@Component({
    selector: 'my-app',
    template: `
The 'shouldShow' boolean value is: {{shouldShow}}
<show-data *ngIf="shouldShow"></show-data>
<div *ngIf="!shouldShow">NOT showing the show-data directive template</div>
`,
    directives: [ShowData]
})
export class App {
    shouldShow:boolean = false;
    constructor(){
        console.log("shouldShow value before timeout",this.shouldShow);
        window.setTimeout(function(){
            this.shouldShow = true;
            console.log("shouldShow value after timeout",this.shouldShow);
        }, 1000);
    }
}
Run Code Online (Sandbox Code Playgroud)

最初,该shouldShow变量设置为false,并且show-data不显示指令模板.精细.

shouldShow 然后由父组件构造函数在一秒后设置为"true".

为什么不在shouldShow父组件视图中更新值?

这是一个傻瓜

angular2-template angular

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

如何呈现实现接口的组件?

假设我有一个接口(或实际组件)ListItemRenderer和一个MyRendererComponent实现该接口的组件(或扩展基本组件)

@Component({
    selector: 'my-renderer',
    template: '<div>My renderer</div>'
})
export class MyRendererComponent implements ListItemRenderer {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想将这个具体的实现传递给另一个组件,例如

@Component({
    selector: 'my-list',
    template: `
        <ul [renderer]="renderer" [items]="items">
            <li *ngFor="let item of items">
                <!-- what goes here? -->
            </li>
        </ul>
    `
})
export class MyList {
    @Input() renderer: ListItemRenderer;
    @Input() items: any[];
    ...
}
Run Code Online (Sandbox Code Playgroud)

显然,父组件将具有renderer类型的公共属性ListItemRenderer.问题是,我如何在我的网站中使用该组件<li>(参见上文中的" 内容? ")?

angular2-template angular

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

Angular 2 RC2新表格

正如文章中所建议的:

https://docs.google.com/document/u/1/d/1RIezQqE4aEhBRmArIAS1mRIZtWFf6JxN_7B4meyWK0Y/pub

为了在RC2中使用新表单,我们需要使用以下代码禁用已弃用的表单:

import {disableDeprecatedForms, provideForms} from '@angular/forms';
bootstrap(AppComponent, [
   disableDeprecatedForms(),
   provideForms()
])
Run Code Online (Sandbox Code Playgroud)

这显然意味着我们现在还需要在package.json中包含以下内容:

"@angular/forms": "2.0.0-rc.2",
Run Code Online (Sandbox Code Playgroud)

但是当我将"@ angular/forms":"2.0.0-rc.2"添加到我的package.json并尝试恢复包时,它会给出以下错误:

npm ERR! node v6.2.1
npm ERR! npm  v3.9.3
npm ERR! No compatible version found: @angular/forms@2.0.0-rc.2
npm ERR! Valid install targets:
npm ERR! 0.1.0
Run Code Online (Sandbox Code Playgroud)

有人可以指导吗?

angular2-forms angular2-directives angular2-template angular

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

一个组件可以有多个模板吗?

有没有办法让Angular 2组件根据我想放置的位置使用许多模板文件?

例如,我有一个login组件,我想在我的网站上放两次不同的设计.

有没有办法可以将模板传递给组件?

angular2-template angular

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

Angular 2.0.1 AsyncPipe不适用于Rx主题

AsyncPipe与BehaviorSubject一起使用,但是我不想用空数据初始化我的服务,因此我使用Subject intead。

问题是NgFor和asyncPipe无法与Subject一起使用,这是一个问题吗?

这有效:

零件:

export class AppComponent {
  foo = new BehaviorSubject<Array<number>>([1,2,3]);

  getFoo(){
     return this.foo.asObservable();
  }
}
Run Code Online (Sandbox Code Playgroud)

模板

<span *ngFor="let e of foo.asObservable() | async">{{e}}</span>
Run Code Online (Sandbox Code Playgroud)

这不起作用:

零件

export class AppComponent {
  foo = new Subject<Array<number>>();

  constructor(){
     setTimeout(() => {
          this.foo.next([1,2,3]);
     }, 3000);
  }

  getFoo(){
     return this.foo.asObservable();
  }
}
Run Code Online (Sandbox Code Playgroud)

模板

<span *ngFor="let e of foo.getFoo() | async">{{e}}</span>
Run Code Online (Sandbox Code Playgroud)

rxjs subject-observer behaviorsubject angular2-template angular

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

滚动Angular2时锁定div

我正在尝试在滚动时在屏幕顶部保留一个div.

我找到了几个关于它的指南和SO问题,但它对我不起作用.

我使用过这些:

这就是我到目前为止所做的事情:

零件 :

import {DOCUMENT} from '@angular/platform-browser';
@Component({
    selector: 'example',
    templateUrl: './example.component.html',
    styleUrls: ['./example.component.css'],
})
export class ExampleComponent implements OnInit {
    public fixed: boolean = false;
    constructor( @Inject(DOCUMENT) private doc: Document) {}
    ngOnInit(): void {
        this.onWindowScroll();
    }
    @HostListener('window:scroll', [])
    onWindowScroll() {
        let number = window.pageYOffset || document.documentElement.scrollTop || window.scrollY || 0;
        if (number > 100) {
            this.fixed = true;
        } else if (this.fixed && number < 10) {
            this.fixed = false; …
Run Code Online (Sandbox Code Playgroud)

html css sticky angular2-template angular

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

在typescript中从数组中删除对象

如何从打字稿中的数组中删除对象?

"revenues":[
{
        "drug_id":"20",
        "quantity":10
},
{
        "drug_id":"30",
        "quantity":1    
}]
Run Code Online (Sandbox Code Playgroud)

所以我想从所有对象中删除drug_id.我怎么做到这一点?谢谢!

typescript angular2-template angular

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