2017-01-01 1 views
1

Сценарии (DOM):Как передать модель через строку в угловом 2

<div *ngFor="let one of many"> 
    <span [innerHtml]="one"></span> 
</div> 

Сценарий (контроллер):

let many = []; 
let timer = 60; 
setInterval(() => timer--, 1000); 
many.push("this is a selection WITH a {{timer}}"); 
many.push("this is a selection WITHOUT a timer"); 

Так что в основном Theres массив "много", который может иметь много строк динамически вставляемые в нее, а также некоторые из строк, переданных в «много», имеют обратный отсчет, а другие нет. Есть ли способ передать модель в DOM через строку, как показано выше, и обновить таймер? И если это выполнится, как это можно добиться.

Я действительно надеюсь, что это не один из тех «gotchas», которые очевидны.

Грэкиас

ответ

3

PLUNKER

Это своего рода «Hacky» решение, но это работает, и вам не нужно создавать дополнительные компоненты.

Во-первых, изменить шаблон для этого:

<div *ngFor="let one of many"> 
    {{one.replace('[timer]', timer)}} 
</div> 

Во-вторых, объявить timer и many в качестве переменных класса:

export class YourComponent { 
    timer:number=60; 
    many:string[]; 

    (...) 
} 

Наконец, при добавлении новых строк в many, когда вы хотите включить timer использование [timer] вместо {{timer}}.

Вы можете изменить [timer] на все, что захотите.

+0

Не совсем. значение таймеров будет добавлено один раз, и обнаружение изменения углов не вызовет его для обновления DOM в последующих обновлениях. – Cozzbie

+0

Ах, извините, я думаю, что я не понял вопрос правильно. Я думал, вы спросили, как сделать вновь добавленные элементы правильно отображаться в DOM. Тогда возникает вопрос о таймере? Вы хотите знать, как периодически запускать таймер? Если нет, уточните, чтобы я мог помочь вам. – AArias

+0

Да, действительно, вопрос касается таймера, и да, похоже, что я не правильно формулирую вопрос, поэтому позвольте мне объяснить в целом. Я хочу, чтобы этот таймер был обновляемым, но я не хочу объявлять его обычным способом в компоненте или DOM, потому что массив «many» получит другие строки. Таким образом, результат может выглядеть примерно так: 'Привет, я таймер (60-59-58 .... 0) <- (это таймер обратного отсчета, динамически переданный« многим ») Здравствуйте, мы ждем вас. <- (Строка динамически передается «многим») Привет, что нового? <- (Еще одна строка динамически передана «многим») ' – Cozzbie

Смежные вопросы