2016-01-13 19 views
5

Tôi muốn có thể sử dụng cú pháp mẫu Angular2 khi xây dựng một Google Maps InfoWindow.Làm cách nào để kết xuất thành phần Angular2 thành chuỗi?

Theo như tôi có thể biết, điều này có nghĩa là chuyển một thành phần dưới dạng chuỗi mẫu đến thuộc tính content trong đối tượng hàm tạo InfoWindow.

Nếu đúng như vậy, tôi tin rằng tôi cần phải định cỡ mẫu thành phần. Điều này có đúng không (và có thể)?

Dưới đây là một ví dụ về những gì tôi nghĩ tôi cần phải làm:

// Component 

import {Component} from 'angular2/core'; 
import {Thing} from './something/in/my/app/thing.model.ts'; 

@Component({ 
    selector: 'my-infowindow', 
    template: `<p>This is an infowindow for {{ something.name }}</p>` 
}) 
export class MyInfoWindowComponent { 
    constructor(public something: Thing) {} 
} 


// Implementation 

import {Thing} from './something/in/my/app/thing.model.ts'; 
import {MyInfoWindowComponent} from './path/to/infowindow.component'; 

/* { ...stuff... } */ 

private _buildInfoWindow(thing: Thing): google.maps.InfoWindow { 
    return new google.maps.InfoWindow({ 
     /* v this is what I want v */ 
     content: new MyInfoWindowComponent(thing).toString() 
     /*^this is what I want^*/ 
    }); 
} 
+0

Hãy xem 'ElementRef': https : //angular.io/docs/ts/latest/api/core/ElementRef-class.html hoặc 'ViewChild': https://angular.io/docs/ts/latest/api/core/ViewChild-var.html – Langley

+0

Tôi không thể thấy điểm tạo thành phần Góc và sau đó xâu chuỗi nó để chuyển nó sang infowindo w. Tại sao bạn không chỉ cần vượt qua một chuỗi để thay thế. Có phải vì bạn muốn sử dụng ràng buộc dữ liệu? Điều này sẽ không được cập nhật sau khi vượt qua nó để infowindow anyway. –

+1

@ GünterZöchbauer - phải, tôi không cần databinding - sytax mẫu chỉ có vẻ đẹp hơn nhiều so với một buildbuilder khủng khiếp. (đặc biệt là cho 'ngIf' và' ngFor'). Điều đó có ý nghĩa? – drewwyatt

Trả lời

2

Hãy thử đi qua các ElementRef angular.io/docs/ts/latest/api/core/ElementRef-class.html.

Hoặc một cái gì đó với ViewChild:

https://angular.io/docs/ts/latest/api/core/ViewChild-var.html

Tôi sẽ không viết mã cho bạn, nhưng ý tưởng là một cái gì đó như thế này:

@Component({ 
    selector: 'my-infowindow', 
    template: `<p #kiddo>This is an infowindow for {{ something.name }}</p>` 
}) 
export class MyInfoWindowComponent { 
    @ViewChild('kiddo') viewChild; 
    constructor(public something: Thing) {} 
    ngOnInit(){ 
     yourFunction(this.viewChild); //or viewChild.innerHtml or w/e works 
    } 
} 
+0

Xin lỗi, nhưng nó không rõ ràng. Làm cách nào để chèn HTML được biên dịch từ thuộc tính viewChild thành phần vào google.maps.InfoWindow content: string? –

Các vấn đề liên quan