【问题标题】:Angular2 click event not firingAngular2单击事件未触发
【发布时间】:2016-09-27 09:20:40
【问题描述】:

我正在尝试实现自定义分页组件。这是模板。

<div *ngIf="totalItems != 0">
    <ul class="pagination">
        <li *ngFor="let page of pages" [ngClass]="{'active': currentPage == page.title}">
            <a (click)="changePage(page)">{{page.title}}</a>
        </li>
    </ul>
    <select>
        <option *ngFor="let size of pageSizes">{{size}}</option>
    </select>
</div>

组件代码:

@Component({
    selector: 'pager',
    templateUrl: 'templates/pager.component.html',
    styleUrls: ['styles/pager.component.css']
})
export class PagerComponent {
    @Input() totalItems: number = 0;
    @Input() lastText: string = "»";
    @Input() firstText: string = "«";
    @Input() nextText: string = "›";
    @Input() prevText: string = "‹";
    public currentPage: number = 1;
    pageSizes: Array<number> = [10, 15, 30];
    public currentSize: number = this.pageSizes[0];

    @Output() pageChanged = new EventEmitter();

    get pages(): Array<IPage> {
        var list = new Array<IPage>();
        let pageCount = Math.ceil(this.totalItems / this.currentSize);
        let start = Math.max(this.currentPage - 1, 1);
        let end = Math.min(this.currentPage + 2, pageCount);
        list.push({ title: this.firstText, number: 1 });
        list.push({ title: this.prevText, number: this.currentPage - 1});
        for (let i = start; i <= end; i++) {
            list.push({ title: String(i), number: i });
        }
        list.push({ title: this.nextText, number: this.currentPage + 1});
        list.push({ title: this.lastText, number: end});
        return list;
    }

    public changePage(page: IPage) {
        this.currentPage = page.number;
        this.pageChanged.emit(null);
    };

    public resetCurrentPage(): void {
        this.currentPage = 1;
    }
}

我使用的是简单的数字数组。然后我想添加 Last/Fits 按钮。我编写的界面包含两个属性标题和页码。现在点击事件不起作用。我的代码有什么问题?

【问题讨论】:

  • 你有什么错误吗?
  • “不起作用”到底是什么意思?
  • @galvan 没有任何错误。 @Günter Zöchbauer 它没有开火。我尝试创建自定义&lt;div&gt; 并在click 上绑定相同的功能它适用于div

标签: events angular typescript


【解决方案1】:

我认为问题在于函数 changePage() 有一个 IPage 类型的参数,而你传递了一个数字

 public changePage(page: IPage) {
    this.currentPage = page.number;
    this.pageChanged.emit(null);
};

改成

 public changePage(num: number) {
    this.currentPage = num;
    this.pageChanged.emit(null);
};

【讨论】:

  • 对不起,我忘记更改模板了。而且这种方式也行不通。
【解决方案2】:

我已经解决了!它类似于this question。它每次都生成新数组。所以角度不能将事件绑定到数组项。 @Günter Zöchbauer,你应该很熟悉。

【讨论】:

  • 我遇到了同样的问题。如果您能说出您是如何解决的,那就太好了?
  • 我不记得实现的细节,只是尝试在你的类字段中保存一个数组并在一个属性中返回它。请参阅我的答案中的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
相关资源
最近更新 更多