Tôi đang cố gắng gửi dữ liệu đến thành phần nội dung phương thức tùy chỉnh để tôi có thể gọi nó từ bất kỳ thành phần nào khác và không lặp lại mã. Tôi mới sử dụng Angular 2 và đã theo dõi bản demo "Components as content" của ng-boostrap cũng như "Component Interaction" trong tài liệu Angular và không tìm được cách để làm việc này hoặc ví dụ cho trường hợp này .Góc 2 ng-bootstrap Phương thức: Cách chuyển dữ liệu vào thành phần nhập
Tôi có thể mở phương thức, nhưng không phải với nội dung động. Tôi đã thử các @Input
và cách tiếp cận biến không thành công. Tôi cũng đã thêm ModalService
cho các nhà cung cấp trong app.module.ts
. Đây là những gì tôi có với cả hai phương pháp đó không làm việc:
page.component.html:
<a (click)="modal('message')">
<template ngbModalContainer><my-modal [data]="data"></my-modal></template>
page.component.ts:
import { Component } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { ModalService } from '../helpers/modal.service'
import { ModalComponent } from '../helpers/modal.component'
@Component({
selector: 'app-page',
templateUrl: './page.component.html',
styleUrls: ['./page.component.scss'],
entryComponents: [ ModalComponent ]
})
export class PageComponent {
data = 'customData'
constructor (
private ngbModalService: NgbModal,
private modalService: ModalService
) { }
closeResult: string
modal(content) {
this.data = 'changedData'
this.modalService.newModal(content)
this.ngbModalService.open(ModalComponent).result.then((result) => {
this.closeResult = `Closed with: ${result}`
}, (reason) => {
this.closeResult = `Dismissed ${reason}`
});
}
}
modal.service.ts:
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class ModalService {
private modalSource = new Subject<string>()
modal$ = this.modalSource.asObservable()
newModal(content: string) {
this.modalSource.next(content)
}
}
modal.component.ts:
import { Component, Input, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
import { ModalService } from './modal.service'
@Component({
selector: 'my-modal',
template: `
<div class="modal-body">
{{data}}
{{content}}
</div>
`
})
export class ModalComponent implements OnDestroy {
@Input() data: string
content = 'hello'
subscription: Subscription
constructor(
private modalService: ModalService
) {
this.subscription = modalService.modal$.subscribe(
content => {
this.content = content
});
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
Sử dụng v2.1.0 góc, góc-cli v1.0.0-beta.16, ng-bootstrap v1.0.0-alpha.8
Cảm ơn Günter, tôi đã đi lại và thực hiện các dịch vụ (xem mục chỉnh sửa) nhưng nó vẫn không làm việc. Có lẽ ngbModalService đang tạo một cá thể mới của thành phần phương thức của tôi để chúng không giao tiếp. Bạn có thấy ý tưởng cập nhật không? – asabido
Hoặc cung cấp dịch vụ trong thành phần gốc hoặc biến dịch vụ thành một dịch vụ đơn. Nó sẽ hoạt động. – ZooZ
Bạn cung cấp 'ModalService' ở đâu? Có bao nhiêu trường hợp bạn nhận được phụ thuộc vào nơi bạn cung cấp nó. Nếu bạn thêm nó vào 'các nhà cung cấp' của một thành phần, mỗi thành phần như vậy sẽ nhận được cá thể riêng của nó. Nếu bạn thêm nó vào 'provider' của' @NgModule() '(không tải lười) thì chỉ có một cá thể được tạo cho toàn bộ ứng dụng. –