feature: add MatchMedia Zone support#543
Conversation
|
In your PR, you patch event listener with bindArgument, it will make the event handler in zone, but will not trigger zoneSpec's scheduleTask/invokeTask/cancelTask callback. there is already a event listener patch logic in utils.ts patchMethod(MatchMedia.prototype, ADD_EVENT_LISTENER, () => zoneAwareAddEventListener);
patchMethod(MatchMedia.prototype, REMOVE_EVENT_LISTENER, () => zoneAwareRemoveEventListener); |
38aa29a to
fdccd11
Compare
|
@JiaLiPassion Even though MediaQueryList's addListener() and removeListener() have similar looking names to EventTarget' addEventListener() and removeEventListener(), they have completely different method signatures and behavior. Therefore you cannot use the existing event listener patch logic in utils.ts. |
|
Yes, you are right, but I still believe we should use the common logic, I will make a PR to generalize the zoneAwareAddEventListener part, I just run a little test about MediaQuery with the generalized version, it worked, so with common logic, we can add other listener patch later. |
|
I just make a PR for a more generic way to patch event target related methods. patchEventTarget(MediaQuerlList.prototype, 'addListener', 'removeListener', (self, args) => {
return {
useCapturing: false,
eventName: 'mediaQuery',
handler: args[0],
target: self || _global,
name: 'mediaQuery',
invokeAddFunc: function (addFnSymbol: any, delegate: Task | NestedEventListenerOrEventListenerObject) {
if (delegate && (<Task>delegate).invoke) {
return this.target[addFnSymbol]((<Task>delegate).invoke);
} else {
return this.target[addFnSymbol](delegate);
}
},
invokeRemoveFunc: function (removeFnSymbol:any, delegate: Task | NestedEventListenerOrEventListenerObject) {
if (delegate && (<Task>delegate).invoke) {
return this.target[removeFnSymbol]((<Task>delegate).invoke);
} else {
return this.target[removeFnSymbol](delegate);
}
}
};
})Is that make sense? |
Add MatchMedia (js media queries) Zone support. Patches MediaQueryList.addListener and MediaQueryList.removeListener. Closes issue #243.