Я пытаюсь создать компонент в Angular 2. Этот компонент имеет переменную title
, значение которой отображается в части шаблона:
import { Component, ViewChild } from '@angular/core';
import { bootstrap } from '@angular/platform-browser-dynamic';
declare var ol: any;
@Component({
selector: 'map',
template: `
<div id="container">
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<strong class="navbar-brand">{{title}}</strong>
</div>
</div>
</nav>
<div id="down" #mapa style="max-height : 500px;">
</div>
</div>
`
})
class MapaComponent {
@ViewChild('mapa') mapa;
map : any;
title : string = 'Mi mapa';
/* Contructor */
constructor() {}
ngAfterViewInit() {
this.map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
})
],
target: this.mapa.nativeElement,
view: new ol.View({...})
})
}
}
bootstrap(MapaComponent, []); // Component is bootstrapped!
Что я хочу сделать, так это изменить значение указанной переменной для каждого созданного компонента, и мне было интересно, можно ли это сделать каким-то образом, объявив значение указанной переменной как атрибут a Component
следующим образом:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mapa</title>
<script src="node_modules/es6-shim/es6-shim.min.js"></script>
<script src="node_modules/zone.js/dist/zone.js"></script>
<script src="node_modules/reflect-metadata/Reflect.js"></script>
<script src="node_modules/systemjs/dist/system.js"></script>
<script src="node_modules/rxjs/bundles/Rx.js"></script>
<script src="systemjs.config.js"></script>
<script src="http://openlayers.org/en/v3.12.1/build/ol.js"></script>
<script>
System.import ('built/map')
.then(null, console.error.bind(console));
</script>
</head>
<body>
<!-- Componente creado -->
<map title = "Mapa A"></map>
<link rel="stylesheet" type="text/css" href="node_modules/bootstrap/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="http://openlayers.org/en/v3.12.1/css/ol.css" type="text/css">
</body>
</html>
Можно ли таким образом изменить значение переменной title?
вы должны использовать следующий класс ElementRef, и поэтому вы его используете.
index.html
угловой.ts
Вы должны использовать это только с «компонентами», которые запускают приложение, так как с дочерними компонентами, если метод, который вы разместили выше, работает, класс ElementRef может вызвать проблемы с безопасностью в вашем веб-приложении, проверьте следующие ссылки для получения дополнительной информации.
Ссылка API angular 2
Документация по проблеме
Другое решение, которое вы можете сделать, — создать дочерний компонент и, таким образом, избежать использования небезопасных классов.
index.html (без особых изменений)
start.ts (Мы называем наш новый компонент MapasComponent)
app/src/frame.html (отправляем параметры дочернему компоненту)
maps.ts (Здесь мы создаем компонент карт, с параметром «inputs» мы отправляем данные)
app/src/maps.html (распечатываем варианты)
Ваше здоровье!