У меня проблема с сокрытием и показом элемента, зависящего от логической переменной в Angular 2.
это код для отображения и скрытия div:
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
переменная «отредактирована» и хранится в моем компоненте:
export class AppComponent implements OnInit{
(...)
public edited = false;
(...)
saveTodos(): void {
//show box msg
this.edited = true;
//wait 3 Seconds and hide
setTimeout(function() {
this.edited = false;
console.log(this.edited);
}, 3000);
}
}
Элемент скрыт, при запуске функции saveTodos элемент отображается, но через 3 секунды, даже если переменная возвращается в значение false, элемент не скрывается. Зачем?
edited
это глобальная переменная. Каков будет ваш подход в*ngFor-loop
?Есть два варианта в зависимости от того, чего вы хотите достичь:
Вы можете использовать скрытую директиву, чтобы показать или скрыть элемент
Вы можете использовать управляющую директиву ngIf, чтобы добавить или удалить элемент. Это отличается от скрытой директивы, потому что она не показывает / скрывает элемент, но добавляет / удаляет из DOM. Вы можете потерять несохраненные данные элемента. Это может быть лучшим выбором для компонента редактирования, который отменен.
Для вас проблема изменения через 3 секунды может быть вызвана несовместимостью с setTimeout. Вы включили библиотеку angular2-polyfills.js на свою страницу?
источник
[hidden]="edited"
кажется, не имеет никаких эффектов ...?[hidden] { display: none !important;}
в вашем глобальном css.Если вам не нужно удалять HTML-элемент Dom, используйте * ngIf.
В противном случае используйте это:
источник
Для показа дочернего компонента я использовал
*ngif="selectedState == 1"
Вместо этого я использовал
[hidden]="selectedState!=1"
Это сработало для меня .. загрузка дочернего компонента правильно и после скрытия и скрытия дочерний компонент не был неопределенным после использования этого.
источник
Это хороший пример использования директивы. Нечто подобное удивительно полезно.
источник
ngIf
istrue
. Есть ли способ установить родительскую переменную, которая контролирует этоfalse
?ngIf
больше в том, находится ли элемент в DOM или нет. Я хочу вот что:<div [hidden]="messages" [removeAfter]=3000>...
где я показываю / скрываю сообщения, если они есть, а затем удаляю сообщения через 3 секунды, чтобы пользователю не приходилось закрывать окно. Я добавил вашу директиву выше и переключил ее на a,hide()
но она не вызывается при отображении сообщений. Как мне заставить его быть вызванным на мероприятии?@Output()
аEventEmitter
?Мы можем сделать это, используя приведенный ниже фрагмент кода.
Угловой код:
HTML-шаблон:
источник
В зависимости от ваших потребностей,
*ngIf
или[ngClass]="{hide_element: item.hidden}"
где класс CSShide_element
является{ display: none; }
*ngIf
может вызвать проблемы, если вы изменяете переменные состояния*ngIf
удаляет, в этих случаях использование CSSdisplay: none;
необходимо.источник
Решение @inoabrian выше работало для меня. Я столкнулся с ситуацией, когда я обновлял свою страницу, и мой скрытый элемент снова появлялся на моей странице. Вот что я сделал, чтобы решить это.
источник
Просто добавьте bind (this) в функцию setTimeout, она начнет работать
и в HTML меняются
к
источник