небольшое добавление: прокручивается только, если последняя строка уже видна. если прокручивать крошечный бит, оставляет содержимое там, где оно (внимание: не тестировалось с разными размерами шрифта, это может потребоваться некоторые корректировки внутри «> = сравнение»):
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;
Поскольку метод post
класса Http
возвращает наблюдаемый, вам необходимо подписаться на его выполнение для обработки инициализации.
Вы должны посмотреть это видео для получения дополнительной информации:
Метод 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();
}
}
Вы должны подписаться на возвращаемое наблюдаемое, если вы хотите, чтобы вызов выполнялся.
См. также документацию Http .
Всегда подписываться !
Метод
HttpClient
не запускает свой HTTP-запрос до тех пор, пока вы не вызовете subscribe () для наблюдаемого, возвращаемого этим методом. Это верно для всех методовHttpClient
.AsyncPipe автоматически подписывает (и отменяет подписку).
Все наблюдаемые, возвращенные из методов
HttpClient
холод по дизайну. Выполнение HTTP-запроса - отложено , что позволяет расширить наблюдаемые дополнительные операции, такие какtap
иcatchError
, прежде чем что-либо произойдет на самом деле.Вызов
subscribe(...)
триггеров выполнение наблюдаемого и вызываетHttpClient
для составления и отправки HTTP-запроса на сервер.Вы можете представить эти наблюдаемые в качестве чертежи для фактических HTTP-запросов.