Other Utils
Open External URL
import { openURL } from 'quasar' |
It will take care of the quirks involved when running under Cordova or on a browser, including notifying the user he/she has to acknowledge opening popups.
Debounce Function
If your App uses JavaScript to accomplish taxing tasks, a debounce function is essential to ensuring a given task doesn’t fire so often that it bricks browser performance. Debouncing a function limits the rate at which the function can fire.
Debouncing enforces that a function not be called again until a certain amount of time has passed without it being called. As in “execute this function only if 100 milliseconds have passed without it being called.”
A quick example: you have a resize listener on the window which does some element dimension calculations and (possibly) repositions a few elements. That isn’t a heavy task in itself but being repeatedly fired after numerous resizes will really slow your App down. So why not limit the rate at which the function can fire?// Returns a function, that, as long as it continues to be invoked, will not
// be triggered. The function will be called after it stops being called for
// N milliseconds. If `immediate` is passed, trigger the function on the
// leading edge, instead of the trailing.
import { debounce } from 'quasar'
(Debounced Function) debounce(Function fn, Number milliseconds_to_wait, Boolean immediate)
// Example:
window.addEventListener(
'resize',
debounce(function() {
.... things to do ...
}, 300 /*ms to wait*/)
)
There’s also a frameDebounce
available which delays calling your function until next browser frame is scheduled to run (read about requestAnimationFrame
).import { frameDebounce } from 'quasar'
(Debounced Function) frameDebounce(Function fn)
// Example:
window.addEventListener(
'resize',
frameDebounce(function() {
.... things to do ...
})
)
Throttle Function
Throttling enforces a maximum number of times a function can be called over time. As in “execute this function at most once every X milliseconds.”import { throttle } from 'quasar'
(Throttled Function) throttle(Function fn, Number limit_in_milliseconds)
// Example:
window.addEventListener(
'resize',
throttle(function() {
.... things to do ...
}, 300 /* execute at most once every 0.3s */)
)
(Deep) Copy Objects
A basic respawn of jQuery.extend()
. Takes same parameters:import { extend } from 'quasar'
let newObject = extend([Boolean deepCopy], targetObj, obj, ...)
Watch out for methods within objects.
Generate UID
Generate unique identifiers:import { uid } from 'quasar'
let uid = uid()
// Example: 501e7ae1-7e6f-b923-3e84-4e946bff31a8
Handling event on a DOM event handler
It’s cross-browser.import { event } from 'quasar'
node.addEventListener('click', evt => {
// left clicked?
(Boolean) event.leftClick(evt)
// middle clicked?
(Boolean) event.middleClick(evt)
// right clicked?
(Boolean) event.rightClick(evt)
// key in number format
(Number) event.getEventKey(evt)
// Mouse wheel distance (in pixels)
(Object {x, y}) event.getMouseWheelDistance(evt)
// position on viewport
// works both for mouse and touch events!
(Object {top, left}) event.position(evt)
// get target DOM Element on which mouse or touch
// event has fired upon
(DOM Element) event.targetElement(evt)
// call stopPropagation and preventDefault
event.stopAndPrevent(evt)
})
Filter
Filter out an array of Objects based on a certain field:import { filter } from 'quasar'
let data = [{fee: 5, desc: 'Bla bla'}, {fee: 10, desc: 'Bla bla'}, {fee: 1, desc: 'Bla bla'}]
console.log(filter('5', {field: 'fee', list: data}))
// [{fee: 5, desc: 'Bla bla'}]