TypeError: Class constructor DefaultValueAccessor cannot be invoked without 'new'
up vote
1
down vote
favorite
There are some Angular third part libraries that provide directives which internally extends the DefaultValueAccessor class.
When they are imported into projects that have their TypeScript compilation target set as es6
, they stop working and throw the error:
TypeError: Class constructor DefaultValueAccessor cannot be invoked without 'new'
examples of different libraries affected by this issue:
- https://github.com/anein/angular2-trim-directive/issues/28
- https://github.com/khashayar/ng-trim-value-accessor/issues/12
A workaround would be copy pasting the source code of the library inside my own project (instead of importing the library as an npm dependency). However this is not nice nor very handy to do for obvious reasons.
How to properly solve this issue in the library?
angular typescript ecmascript-6 angular-directive controlvalueaccessor
add a comment |
up vote
1
down vote
favorite
There are some Angular third part libraries that provide directives which internally extends the DefaultValueAccessor class.
When they are imported into projects that have their TypeScript compilation target set as es6
, they stop working and throw the error:
TypeError: Class constructor DefaultValueAccessor cannot be invoked without 'new'
examples of different libraries affected by this issue:
- https://github.com/anein/angular2-trim-directive/issues/28
- https://github.com/khashayar/ng-trim-value-accessor/issues/12
A workaround would be copy pasting the source code of the library inside my own project (instead of importing the library as an npm dependency). However this is not nice nor very handy to do for obvious reasons.
How to properly solve this issue in the library?
angular typescript ecmascript-6 angular-directive controlvalueaccessor
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
There are some Angular third part libraries that provide directives which internally extends the DefaultValueAccessor class.
When they are imported into projects that have their TypeScript compilation target set as es6
, they stop working and throw the error:
TypeError: Class constructor DefaultValueAccessor cannot be invoked without 'new'
examples of different libraries affected by this issue:
- https://github.com/anein/angular2-trim-directive/issues/28
- https://github.com/khashayar/ng-trim-value-accessor/issues/12
A workaround would be copy pasting the source code of the library inside my own project (instead of importing the library as an npm dependency). However this is not nice nor very handy to do for obvious reasons.
How to properly solve this issue in the library?
angular typescript ecmascript-6 angular-directive controlvalueaccessor
There are some Angular third part libraries that provide directives which internally extends the DefaultValueAccessor class.
When they are imported into projects that have their TypeScript compilation target set as es6
, they stop working and throw the error:
TypeError: Class constructor DefaultValueAccessor cannot be invoked without 'new'
examples of different libraries affected by this issue:
- https://github.com/anein/angular2-trim-directive/issues/28
- https://github.com/khashayar/ng-trim-value-accessor/issues/12
A workaround would be copy pasting the source code of the library inside my own project (instead of importing the library as an npm dependency). However this is not nice nor very handy to do for obvious reasons.
How to properly solve this issue in the library?
angular typescript ecmascript-6 angular-directive controlvalueaccessor
angular typescript ecmascript-6 angular-directive controlvalueaccessor
asked Nov 19 at 9:28
Francesco Borzì
12.3k74777
12.3k74777
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
I've resolved by making the class implements ControlValueAccessor
instead of extends DefaultValueAccessor
.
As a consequence of that, I also had to implement the missing methods, so I added the following:
import { ControlValueAccessor } from "@angular/forms";
// ...
export class MyClass implements ControlValueAccessor {
// ...
onChange = (_: any) => {};
onTouched = () => {};
// ...
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
registerOnTouched(fn: () => void): void { this.onTouched = fn; }
setDisabledState(isDisabled: boolean): void {
this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
}
}
Note that the setDisabledState
is not mandatory (the ControlValueAccessor
will not force you to implement it, but you need it in order to keep the disabled
status of your control working correctly.
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
I've resolved by making the class implements ControlValueAccessor
instead of extends DefaultValueAccessor
.
As a consequence of that, I also had to implement the missing methods, so I added the following:
import { ControlValueAccessor } from "@angular/forms";
// ...
export class MyClass implements ControlValueAccessor {
// ...
onChange = (_: any) => {};
onTouched = () => {};
// ...
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
registerOnTouched(fn: () => void): void { this.onTouched = fn; }
setDisabledState(isDisabled: boolean): void {
this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
}
}
Note that the setDisabledState
is not mandatory (the ControlValueAccessor
will not force you to implement it, but you need it in order to keep the disabled
status of your control working correctly.
add a comment |
up vote
0
down vote
accepted
I've resolved by making the class implements ControlValueAccessor
instead of extends DefaultValueAccessor
.
As a consequence of that, I also had to implement the missing methods, so I added the following:
import { ControlValueAccessor } from "@angular/forms";
// ...
export class MyClass implements ControlValueAccessor {
// ...
onChange = (_: any) => {};
onTouched = () => {};
// ...
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
registerOnTouched(fn: () => void): void { this.onTouched = fn; }
setDisabledState(isDisabled: boolean): void {
this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
}
}
Note that the setDisabledState
is not mandatory (the ControlValueAccessor
will not force you to implement it, but you need it in order to keep the disabled
status of your control working correctly.
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
I've resolved by making the class implements ControlValueAccessor
instead of extends DefaultValueAccessor
.
As a consequence of that, I also had to implement the missing methods, so I added the following:
import { ControlValueAccessor } from "@angular/forms";
// ...
export class MyClass implements ControlValueAccessor {
// ...
onChange = (_: any) => {};
onTouched = () => {};
// ...
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
registerOnTouched(fn: () => void): void { this.onTouched = fn; }
setDisabledState(isDisabled: boolean): void {
this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
}
}
Note that the setDisabledState
is not mandatory (the ControlValueAccessor
will not force you to implement it, but you need it in order to keep the disabled
status of your control working correctly.
I've resolved by making the class implements ControlValueAccessor
instead of extends DefaultValueAccessor
.
As a consequence of that, I also had to implement the missing methods, so I added the following:
import { ControlValueAccessor } from "@angular/forms";
// ...
export class MyClass implements ControlValueAccessor {
// ...
onChange = (_: any) => {};
onTouched = () => {};
// ...
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
registerOnTouched(fn: () => void): void { this.onTouched = fn; }
setDisabledState(isDisabled: boolean): void {
this._renderer.setProperty(this._elementRef.nativeElement, 'disabled', isDisabled);
}
}
Note that the setDisabledState
is not mandatory (the ControlValueAccessor
will not force you to implement it, but you need it in order to keep the disabled
status of your control working correctly.
answered Nov 25 at 14:48
Francesco Borzì
12.3k74777
12.3k74777
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371662%2ftypeerror-class-constructor-defaultvalueaccessor-cannot-be-invoked-without-new%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown