В настоящее время, мой объект DOM выглядит следующим образом:Угловое 2 вручную запуска ngIf
<div *ngIf="checkCam1Exists()">
<app-counter [index]="1"></app-counter>
</div>
В рамках компонента, функция 'checkCam1Exists() выглядит следующим образом:
checkCam1Exists(){
console.log("checkCam1ran");
if(this.cameraService.camera1 == null){
return false;
}
else{
return true;
}
}
Где cameraService является сервис, который вводится в конструктор компонентов, а camera1 - объект в CameraService.
Моя проблема заключается в том, чтобы запустить ngIf снова. Объект camera1 обновляется из другой службы (dataService, которая делает HTTP-запрос). Как запустить ngIf для запуска снова?
Я прочитал сообщение ниже: Triggering Angular2 change detection manually - но примеры, представленные в Угловых документах, как представляется, не охватывают, как проверять переменные за пределами класса компонента (и мне нужно проверить служебные переменные).
EDIT
мне удалось получить автоматическое обнаружение изменений рабочего использования:
constructor(private ref: ChangeDetectorRef, private cameraService: CameraService, private toolbarService: ToolbarService) {
ref.detach();
setInterval(() => {
this.ref.detectChanges();
}, 5000);
}
Хотя это чувствует себя невероятно неэффективным способом, чтобы сделать это. Как я могу вручную запустить обнаружение изменений?
EDIT 2
С помощью Лукаса Tetreault, я думаю, что я мог бы идти за пределами углового 2 зоны для исходного события щелчка, любое взаимодействие с приложением (после того, как исходное событие Click) причины ngIf обнаружить это изменение и снова начать работать. Мой вопрос должен лежать здесь:
map.data.addListener('click', (event) => {
var mapElement = event.feature.getProperty('type');
switch(mapElement){
case 'classifiedroads':
var roadnumber = event.feature.getProperty('roadID');
map.data.revertStyle();
map.data.overrideStyle(event.feature, {
strokeWeight: 8
});
this.roadService.roadClicked(roadID);
break;
case 'cameras':
var cameraID = event.feature.getProperty('trafficID');
this.cameraService.cameraClicked(cameraID); //camera is initialised at this stage.
break;
default:
break;
}
});
У меня есть объект Google Map импортированные с помощью JavaScript (существуют ограничения с проектом Angular2 Google Map, что я был предупрежден, против которого почему я не использую это). Это событие click должно выходить за пределы зоны Angular 2, и когда я нажимаю в другом месте приложения, я снова вхожу в зону Angular 2, и обнаружение изменения ngIf снова запускается.
Есть ли способ, которым я могу вручную принудительно изменить обнаружение изменения ngIf?
Я бы хотел, чтобы ваш ответ был +1, так как я не понимал, что могу ссылаться на инъецированные службы непосредственно из HTML (так что спасибо за этот совет!), Но, к сожалению, у меня все еще есть одна и та же проблема, когда ngIf еще нужно запускать вручную после изменения объекта cameraService. – fila
Обнаружение изменений для компонента поднимет изменения к сервису: http://plnkr.co/edit/lxgAJs –
Итак, используя ваш совет, я просмотрел его дальше. Я выхожу за пределы зоны Angular 2 для первоначального щелчка (объект Google Map импортирован с использованием JavaScript). Когда я нажимаю на статический объект в Карте Google, JavaScript обрабатывает событие клика (из-за Карт Google), и даже несмотря на то, что переменные обновляются, ngIf изменить обнаружение никогда не произойдет. В тот момент, когда я взаимодействую с сайтом в другом месте (буквально щелкнув в другом месте), появляются обновления просмотра и камера. Я предполагаю, что я должен заглянуть в ngZone для события click click. – fila