Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
afspawnservice
Advanced tools
This is an Angular service that allows you to spawn components on-the-fly, with a service call. For more details, watch my talk here: https://www.youtube.com/watch?v=-Hy-i4q8Vtg&t=38s
This is an Angular/TypeScript service that will dynamically create components in Angular, and attach them to a view.
The current version of this repo supports installing AFSpawnService
into your project
via npm, and using the service to init your own components on-the-fly.
AFSpawnService
If you want to know more about AFSpawnService
, or you need to understand the need
for the service, please check out my talk about CAAS: Components As A Service.
npm install --save afspawnservice
import { AFSpawnService } from 'afspawnservice'
In a component/module/service file, you will want to inject the AFSpawnService
@Component({
selector: 'my-component',
templateUrl: './my-component.html'
})
export class MyComponent{
//Inject it into your component or service
constructor(private spawnService: AFSpawnService){}
}
appModule.entryComponents
In order to be able to spawn a component like this, you have to tell Angular that this component is an
entryComponent
. This means that it isn't a child component of any other components. It is a top-level
component. If you don't do this, you can't dynamically create the component with AFSpawnService
.
Here is how you do this:
@NgModule({
... // ▼▼▼ By adding your component to the entryComponents, it is now ready to be spawned dynamically
entryComponents: [ FooComponent ]
...
})
export class AppModule{}
First import the component class that you want to spawn, and then call the spawn service, and pass in the class to it.
Note: that since there was no second parameter provided, the spawned component will be attached to the document.body
import { FooComponent } from '...somewhere'
//inside the class
export class AppComponent{
constructor(private spawnService: AFSpawnService){}
// This is where you spawn the FooComponent
showFooComponent(){
let context = {title: 'Brocchi Rocks'};
let spawnRef = this.spawnService.createComponent(FooComponent);
}
}
If you provide a second argument, and that second argument is a ViewContainerRef
, then AFSpawnService
will attach
the spawned component to the provided ViewContainerRef
.
In order to get access to a ViewContainerRef
, you can add a Template Reference Variable
to your template on the element that you would like to append the spawned component to. Then in your class, you can get
access to that part of the template by annotating your class like so:
export class AppComponent{
// Name your ViewContainerRef
@ViewChild('temprefvar', {read: ViewContainerRef})
constructor(private spawnService: AFSpawnService){}
// AND NOW PASS THAT IN HERE
showFooComponent(){
let context = {title: 'Brocchi Rocks'};
let spawnRef = this.spawnService.createComponent(FooComponent, this.temprefvar);
}
}
This will attach the spawned component to to view that you provided.
There are two ways to pass inputs/outputs to the spawned component. The first is by passing a key/value object as the third
parameter to the createComponent
method.
The second way is by saving the result of the createComponent
call, and then call .next()
on it with a key/value object.
The keys needs to match the names of the inputs and outputs.
//First way ||| HERE |||
this.spawnService.createComponent(FooComponent, this.temprefvar, {title: "HELLO WORLD"})
//Second Way
let spawnRef = this.spawnService.createComponent(FooComponent, this.temprefvar);
spawnRef.next({title: "HELLO WORLD"});
You can call .next()
on the spawnReference
as often as you would like. It will continue to update the values on your spawned component.
Let me know if you have questions.
This Repo is accepting Pull Requests.
This project was generated with Angular CLI version 1.0.2.
FAQs
This is an Angular service that allows you to spawn components on-the-fly, with a service call. For more details, watch my talk here: https://www.youtube.com/watch?v=-Hy-i4q8Vtg&t=38s
The npm package afspawnservice receives a total of 2 weekly downloads. As such, afspawnservice popularity was classified as not popular.
We found that afspawnservice demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.