আমার কৌনিক 2 তে একটি টাইমার দরকার যা একটি সময়ের ব্যবধানের পরে টিক দেয় এবং কিছু কাজ করে (কিছু ফাংশন হিসাবে ডাকা হতে পারে)।
কৌনিক 2 দিয়ে এটি কীভাবে করবেন?
আমার কৌনিক 2 তে একটি টাইমার দরকার যা একটি সময়ের ব্যবধানের পরে টিক দেয় এবং কিছু কাজ করে (কিছু ফাংশন হিসাবে ডাকা হতে পারে)।
কৌনিক 2 দিয়ে এটি কীভাবে করবেন?
উত্তর:
পূর্ববর্তী সমস্ত উত্তরগুলি ছাড়াও, আমি এটি আরএক্সজেএস পর্যবেক্ষণগুলি ব্যবহার করে করব
পর্যবেক্ষণযোগ্য.টিমার পরীক্ষা করুন
এখানে একটি নমুনা কোড রয়েছে, এটি 2 সেকেন্ডের পরে শুরু হবে এবং তারপরে প্রতি সেকেন্ডে টিক্স দিবে:
import {Component} from 'angular2/core';
import {Observable} from 'rxjs/Rx';
@Component({
selector: 'my-app',
template: 'Ticks (every second) : {{ticks}}'
})
export class AppComponent {
ticks =0;
ngOnInit(){
let timer = Observable.timer(2000,1000);
timer.subscribe(t=>this.ticks = t);
}
}
এবং এখানে একটি কর্মজীবী প্লামকার
আপডেট আপনি যদি অ্যাপকোম্পোনটি ক্লাসে ঘোষিত কোনও ফাংশন কল করতে চান তবে আপনি নিম্নলিখিতগুলির একটি করতে পারেন:
** আপনি যে ফাংশনটি কল করতে চান তা ধরে নিয়ে ফানকের নাম দেওয়া হয়েছে ,
ngOnInit(){
let timer = Observable.timer(2000,1000);
timer.subscribe(this.func);
}
উপরোক্ত পদ্ধতির সমস্যাটি হ'ল যদি আপনি এইটিকে "ফান" এর অভ্যন্তরে কল করেন তবে এটি অ্যাপকোম্পোন্ট অবজেক্টের পরিবর্তে গ্রাহক অবজেক্টকে উল্লেখ করবে যা সম্ভবত আপনি চান না।
যাইহোক, নীচের পদ্ধতির মধ্যে, আপনি একটি ল্যাম্বডা এক্সপ্রেশন তৈরি করেন এবং এর ভিতরে ফাংশন ফানকে কল করেন । এইভাবে, ফান টু কলটি এখনও অ্যাপকোম্পোনমেন্টের স্কোপের মধ্যে রয়েছে। এটি আমার মতে এটি করার সর্বোত্তম উপায়।
ngOnInit(){
let timer = Observable.timer(2000,1000);
timer.subscribe(t=> {
this.func(t);
});
}
কাজের কোডের জন্য এই প্লাঙ্কারটি পরীক্ষা করুন check
timer
ব্যবহার করা হয়েছে বলে মনে হচ্ছে setInterval()
। তবে, আপনি ডিফল্ট শিডিয়ুলারের পরিবর্তে এটি ব্যবহার করতে animationFrame
শিডিয়ুলার (যা ব্যবহার করে requestAnimationFrame()
) পাস করতে পারেন async
। আপনাকে যা করতে হবে তা হ'ল Observable.timer(*,*,Scheduler.animationFrame)
, প্রদত্ত import {Scheduler} from ‘rxjs’
though তবে যদিও timer
এটি কাজ করছে বলে মনে হয় না। এটি এখনও ব্যবহার করা হয় বলে মনে হচ্ছে setInterVal()
। যাইহোক, পর্যবেক্ষণযোগ্য যেমন অন্য ধরনের উপর Observable.range(0,1000,Scheduler.animationFrame)
, requestAnimationFrame
নিশ্চিত জন্য ব্যবহৃত হয়। পারফরম্যান্স অনুসারে, আমি এখনই আপনাকে নিশ্চিত উত্তর দিতে পারব না।
আরেকটি সমাধান হ'ল টাইমারঅবসার্ভেবল ব্যবহার
টাইমারঅবসার্ভেবল পর্যবেক্ষণযোগ্য একটি সাবক্লাস।
import {Component, OnInit, OnDestroy} from '@angular/core';
import {Subscription} from "rxjs";
import {TimerObservable} from "rxjs/observable/TimerObservable";
@Component({
selector: 'app-component',
template: '{{tick}}',
})
export class Component implements OnInit, OnDestroy {
private tick: string;
private subscription: Subscription;
constructor() {
}
ngOnInit() {
let timer = TimerObservable.create(2000, 1000);
this.subscription = timer.subscribe(t => {
this.tick = t;
});
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
PS: সাবস্ক্রাইব করতে ভুলবেন না।
this.subscription.unsubscribe();
সাবস্ক্রাইব করুন।
import {Component, View, OnInit, OnDestroy} from "angular2/core";
import { Observable, Subscription } from 'rxjs/Rx';
@Component({
})
export class NewContactComponent implements OnInit, OnDestroy {
ticks = 0;
private timer;
// Subscription object
private sub: Subscription;
ngOnInit() {
this.timer = Observable.timer(2000,5000);
// subscribing to a observable returns a subscription object
this.sub = this.timer.subscribe(t => this.tickerFunc(t));
}
tickerFunc(tick){
console.log(this);
this.ticks = tick
}
ngOnDestroy(){
console.log("Destroy timer");
// unsubscribe here
this.sub.unsubscribe();
}
}
Rxjs 6.2.2 এবং কৌণিক 6.1.7 সহ, আমি একটি পেয়েছিলাম:
Observable.timer is not a function
ত্রুটি. এটি প্রতিস্থাপনের Observable.timer
মাধ্যমে সমাধান করা হয়েছিল timer
:
import { timer, Subscription } from 'rxjs';
private myTimerSub: Subscription;
ngOnInit(){
const ti = timer(2000,1000);
this.myTimerSub = ti.subscribe(t => {
console.log("Tick");
});
}
ngOnDestroy() {
this.myTimerSub.unsubscribe();
}
আপনি কেবল সেটইন্টারভাল ইউটিলিটিটি ব্যবহার করতে পারেন এবং কলব্যাক হিসাবে তীর ফাংশনটি ব্যবহার করতে পারেন যাতে this
উপাদানটির উদাহরণটি নির্দেশ করা যায়।
প্রাক্তন হিসাবে:
this.interval = setInterval( () => {
// call your functions like
this.getList();
this.updateInfo();
});
আপনার এনজিওনডেস্ট্রয় লাইফাইসাইকেল হুকের অভ্যন্তরে অন্তর সাফ করুন।
ngOnDestroy(){
clearInterval(this.interval);
}
আমি এমন একটি সমস্যার মুখোমুখি হয়েছি যে আমাকে টাইমার ব্যবহার করতে হয়েছিল, তবে আমি সেগুলি 2 উপাদান একই সময়ে, একই স্ক্রিনে প্রদর্শন করতে হয়েছিল। আমি একটি সেবারে টাইমারঅবসার্ভেবল তৈরি করেছি। আমি উভয় উপাদান টাইমার সাবস্ক্রাইব, এবং কি ঘটেছে? এটি সিঙ্ক হবে না, কারণ নতুন সাবস্ক্রিপশন সর্বদা এর নিজস্ব স্ট্রিম তৈরি করে।
আমি যা বলতে চাই তা হ'ল যদি আপনি বেশ কয়েকটি স্থানে একটি টাইমার ব্যবহার করার পরিকল্পনা .publishReplay(1).refCount()
করেন তবে সর্বদা পর্যবেক্ষকের শেষে রাখেন, কারণ এটি প্রতিবারই একই স্ট্রিমটি প্রকাশ করবে।
উদাহরণ:
this.startDateTimer = Observable.combineLatest(this.timer, this.startDate$, (localTimer, startDate) => {
return this.calculateTime(startDate);
}).publishReplay(1).refCount();
একটি এনপিএম প্যাকেজ পেয়েছে যা পরিষেবা হিসাবে আরএক্সজেএস দিয়ে এটিকে সহজ করে তোলে।
https://www.npmjs.com/package/ng2-simple-timer
আপনি বিদ্যমান টাইমারে 'সাবস্ক্রাইব' করতে পারেন যাতে আপনি একই উপাদানটিতে বহুবার ব্যবহার করে বাজিলিয়ান টাইমার তৈরি না করেন।
আপনি যদি এনজিওইনিতে কোনও পদ্ধতি চালানোর দিকে তাকান তবে আপনি এই জাতীয় কিছু করতে পারেন:
আরএক্সজেএস থেকে এই 2 টি গ্রন্থাগার আমদানি করুন:
import {Observable} from 'rxjs/Rx';
import {Subscription} from "rxjs";
তারপরে টাইমার এবং ব্যক্তিগত সাবস্ক্রিপশন ঘোষণা করুন, উদাহরণস্বরূপ:
timer= Observable.timer(1000,1000); // 1 second for 2 seconds (2000,1000) etc
private subscription: Subscription;
টাইমার থামলে সর্বশেষ তবে কমপক্ষে চালানোর পদ্ধতি নয়
ngOnInit() {
this.subscription = this.timer.subscribe(ticks=> {
this.populatecombobox(); //example calling a method that populates a combobox
this.subscription.unsubscribe(); //you need to unsubscribe or it will run infinite times
});
}
সবই, কৌণিক 5
Set Timer and auto call service after certain time
// Initialize from ngInit
ngOnInit(): void {this.getNotifications();}
getNotifications() {
setInterval(() => {this.getNewNotifications();
}, 60000); // 60000 milliseconds interval
}
getNewNotifications() {
this.notifyService.getNewNotifications().subscribe(
data => { // call back },
error => { },
);
}