Ответы пользователя по тегу Angular
  • Почему не вызывается метод из другого метода в компоненте?

    @Firik67
    Middle PHP Developer
    Не сильно хорош в js, но вывод примерно такой - когда вы передаете в качестве колбэка this.geoSuccess, то после вызова this.geoSuccess меняется контекст this, в котором уже нет ваших свойств и методов.
    У меня заработало вот так:
    //our root app component
    import {Component, NgModule, OnInit} from '@angular/core';
    import {BrowserModule} from '@angular/platform-browser';
    import {HttpClient, HttpClientModule} from '@angular/common/http';
    import {Observable} from 'rxjs/Observable';
    
    @Component({
      selector: 'my-app',
      template: `
        <div>
          {{weatherData}}
        </div>
      `,
    })
    class App implements OnInit{
      weatherData: any;
      apiKey: string;
      
      constructor(private http: HttpClient){
        this.apiKey = 'cfcff50de820f9f3e1e5e655e5949edd';
      }
    
      /* при инициализации проверяем поддержку геолокации, 
      *  если есть поддержка - управление переходит в this.geoSuccess
      *  так же функции this.geoSuccess в качестве аргумента передается объект с данными о геолокации
      */
      ngOnInit(){
        if(navigator.geolocation){
          navigator.geolocation.getCurrentPosition(position => this.geoSuccess(position), this.geoError);
        }
      }
    
      /* 
      *  Ф-ция получает аргумент url и выполняет по нему get запрос
      */
      getCurrentWeather(url:string): Observable<any>{
        return this.http.get(url);
      }
    
      geoError(){
        console.log("Unable to retrieve your location");
      }
      
      /* Здесь составляется url для запроса погодных данных по местоположению;
      *  Так же вызывается ф-ция this.getCurrentWeather которой аргументом предаем url и осуществляем get запрос по данному url
      *  подписываемся на ф-цию и получив данные, пишем их в переменную weatherData
      */
      geoSuccess(position){
        let geoApiUrl = 'http://api.openweathermap.org/data/2.5/weather?lat='+ position.coords.latitude + '&lon=' + position.coords.longitude + '&APPID=' + this.apiKey;
        this.getCurrentWeather(geoApiUrl).subscribe(data => {
          this.weatherData = data;
        });
      }
    }
    
    @NgModule({
      imports: [ BrowserModule, HttpClientModule ],
      declarations: [ App ],
      bootstrap: [ App ]
    })
    export class AppModule {}

    Надеюсь, более опытные товарищи объяснят подробнее:)
    Ответ написан
    1 комментарий
  • Render на стороне сервера или клиента. для AJAX ответа?

    @Firik67
    Middle PHP Developer
    Во 2 способе плохо то, что если вам эти данные нужно будет отправить ещё куда нибудь, то придётся переделывать весь рендер. Первый способ универсален. Получили данные и делайте уже что хотите с ними.
    Ответ написан
    4 комментария