Выполнение метода POST контроллера из машинописных / угловых [дубликатов]

небольшое добавление: прокручивается только, если последняя строка уже видна. если прокручивать крошечный бит, оставляет содержимое там, где оно (внимание: не тестировалось с разными размерами шрифта, это может потребоваться некоторые корректировки внутри «> = сравнение»):

var objDiv = document.getElementById(id);
var doScroll=objDiv.scrollTop>=(objDiv.scrollHeight-objDiv.clientHeight);                   

// add new content to div
$('#' + id ).append("new line at end<br>"); // this is jquery!

// doScroll is true, if we the bottom line is already visible
if( doScroll) objDiv.scrollTop = objDiv.scrollHeight;
76
задан Nicu 24 March 2016 в 20:41
поделиться

3 ответа

Поскольку метод post класса Http возвращает наблюдаемый, вам необходимо подписаться на его выполнение для обработки инициализации.

Вы должны посмотреть это видео для получения дополнительной информации:

113
ответ дан Thierry Templier 18 August 2018 в 23:41
поделиться
  • 1
    Спасибо, что это было очень полезно, это было немного запутанно с новым подходом – Nicu 24 March 2016 в 21:04
  • 2
    @Thiery Не могу посмотреть видео, так как это только для участников – Tatarin 29 October 2017 в 15:06
  • 3
    Я не смотрел видео, но информация «... подписаться на него ...» говорит все. – chris 3 July 2018 в 11:03
  • 4
    – Karthikeyan VK 3 October 2018 в 14:28

Метод Get не требует использования метода подписки, но метод post требует подписи. Получить и отправить образцы кода ниже.

import { Component, OnInit } from '@angular/core'
import { Http, RequestOptions, Headers } from '@angular/http'
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/catch'
import { Post } from './model/post'
import { Observable } from "rxjs/Observable";

@Component({
    templateUrl: './test.html',
    selector: 'test'
})
export class NgFor implements OnInit {

    posts: Observable<Post[]>
    model: Post = new Post()

    /**
     *
     */
    constructor(private http: Http) {

    }

    ngOnInit(){
        this.list()
    }

    private list(){
        this.posts = this.http.get("http://localhost:3000/posts").map((val, i) => <Post[]>val.json())
    }

    public addNewRecord(){
        let bodyString = JSON.stringify(this.model); // Stringify payload
        let headers      = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON
        let options       = new RequestOptions({ headers: headers }); // Create a request option

        this.http.post("http://localhost:3000/posts", this.model, options) // ...using post request
                         .map(res => res.json()) // ...and calling .json() on the response to return data
                         .catch((error:any) => Observable.throw(error.json().error || 'Server error')) //...errors if
                         .subscribe();
    }
}
20
ответ дан Alex Kuzmin 18 August 2018 в 23:41
поделиться
  • 1
    спасибо за код, его сэкономить много времени – nguyên 1 July 2017 в 14:17

Вы должны подписаться на возвращаемое наблюдаемое, если вы хотите, чтобы вызов выполнялся.

См. также документацию Http .

Всегда подписываться !

Метод HttpClient не запускает свой HTTP-запрос до тех пор, пока вы не вызовете subscribe () для наблюдаемого, возвращаемого этим методом. Это верно для всех методов HttpClient.

AsyncPipe автоматически подписывает (и отменяет подписку).

Все наблюдаемые, возвращенные из методов HttpClient холод по дизайну. Выполнение HTTP-запроса - отложено , что позволяет расширить наблюдаемые дополнительные операции, такие как tap и catchError, прежде чем что-либо произойдет на самом деле.

Вызов subscribe(...) триггеров выполнение наблюдаемого и вызывает HttpClient для составления и отправки HTTP-запроса на сервер.

Вы можете представить эти наблюдаемые в качестве чертежи для фактических HTTP-запросов.

14
ответ дан Igor 18 August 2018 в 23:41
поделиться
  • 1
    Большое спасибо, что это действительно так. – tatsu 12 April 2018 в 07:51
Другие вопросы по тегам:

Похожие вопросы: