Wenn sich beim Routing nur die Parameter Ihres Router-Links ändern, wird (in Ihrem Fall: card.id) Angular die Komponente nicht zerstören und neu erstellen.
Angular zerstört und erstellt die Komponente nur, wenn sich die ursprüngliche Route ändert.
Daher OnInit wird nicht aufgerufen.
Wenn Sie die card.id in Ihrer Komponente benötigen, können Sie den params wie diese abonnieren:
constructor(route:ActivatedRoute) {
route.params.subscribe(val => {
console.log("Button ID: " + val.id);
});
}
Beachten Sie, dass Sie benötigen ActivatedRoute in Ihrer Karte bearbeiten Komponente zu importieren und zu injizieren.
Entire Code für App-Komponente:
//our root app component
import {Component, NgModule, VERSION, OnInit} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import { SortablejsModule, SortablejsOptions } from 'angular-sortablejs';
import { Routes, RouterModule, ActivatedRoute } from '@angular/router';
@Component({
selector: 'my-app',
template: `<router-outlet></router-outlet>`,
})
export class App {
}
@Component({
selector: 'my-cards',
template: `
<p> Try to move buttons </p>
<div class="group" *ngFor="let group of groups" [sortablejs]="group.cards" [sortablejsOptions]="sortableOptions">
<div class="card" *ngFor="let card of group.cards">
<button routerLink="card/edit/{{card.id}}">Edit {{card.id}}</button>
</div>
<hr />
</div>
`,
})
export class Cards {
groups = [
{
id: 1,
cards: [
{
id: 1,
},
{
id: 2,
},
{
id: 3,
}
]
},
{
id: 2,
cards: [
{
id: 4,
},
{
id: 5,
},
{
id: 6,
}
]
}
];
sortableOptions: SortablejsOptions = {
group: 'checks'
}
}
@Component({
selector: 'my-card-edit',
template: `
<p routerLink="">Go Home</p>
<p>{{content}}</p>
<input type="text" value="{{content}}">
`,
})
export class CardEdit implements OnInit {
content = "content here";
constructor(route: ActivatedRoute) {
route.params.subscribe(val => {
console.log("Button ID: " + val.id);
});
}
}
@NgModule({
imports: [
BrowserModule,
SortablejsModule.forRoot({
animation: 0,
}),
RouterModule.forRoot([
{path: '', component: Cards},
{path: 'card/edit/:id', component: CardEdit}
])
],
declarations: [ App, Cards, CardEdit ],
bootstrap: [ App ]
})
export class AppModule {}
Können Sie das Problem mit einem JSFiddle demonstrieren? Es würde Ihre Chancen auf eine (gute) Antwort erhöhen. – vektor
Können Sie Ihren Beitrag bearbeiten, damit wir die Komponente sehen können, in der ngOnInit nicht ausgeführt wird, und die Komponente, die –
aufruft. Geben Sie einfach ein paar Minuten –