- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 Angular 5 与 SortableJs 结合使用。
在一个页面上,我列出了多张分组的卡片。
HTML 看起来像
<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</button>
</div>
</div>
当我将卡片从一个组移到另一个组并单击编辑按钮后,它会将我重定向到一个页面,我可以在其中编辑所选卡片。
当它把我重定向到那个页面时,构造函数和 ngOnInit 没有被执行。
在我点击一个元素后,这两个元素就会执行。
更新:Plunker 代码:https://embed.plnkr.co/mCJGo60sxQLQohWRYC3O/
编辑:要查看问题,您需要将一个按钮从一组移动到另一组,然后单击您移动的同一按钮。您会看到绑定(bind)尚未完成。
最佳答案
路由时,如果只有路由器链接的参数发生变化,(在您的情况下为:card.id)Angular 不会破坏并重新创建您的组件。
Angular 仅在您的原始路线发生变化时才销毁并重新创建组件。
因此没有调用 onInit。
如果您的组件中需要 card.id,您可以像这样订阅参数:
constructor(route:ActivatedRoute) {
route.params.subscribe(val => {
console.log("Button ID: " + val.id);
});
}
请注意,您需要在卡片编辑组件中导入并注入(inject) ActivatedRoute。
应用组件的完整代码:
//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 {}
关于Angular 5 - 不执行构造函数和 ngOnInit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47812687/
在我的项目中,我想在 app.component 初始化期间调用一个 api,子组件应该等到 app.comonent 在 ngOnInit() 中完成 在 app.component.ts 中: n
在我的 NativeScript 应用程序中,我将路线设置为 export const routes = [ { path: "", component: AppComponent},
我有两个子组件,我想在它们之间传递数据,为此我使用服务。 在服务中我有 headerObject = new Subject(); 在第一个组件中我有方法 onClick() { thi
我有两个组件:TileComponent.ts 和 FullScreenComponent.ts。 单击 TileComponent 后,FullScreenComponent 将打开。在 TileC
在我定义它并对其进行排序后,我在控制台中收到一条错误消息,显示ERROR ReferenceError:sortedArr未定义。 这是我的 app.component.ts 文件: import {
我想通过 Angular 6 制作一个更新页面,首先从 webservice 加载数据并将其建立在 html form 中。我创建了一个 resovler 来处理异步数据加载,但是组件中的观察者总是返
我有一个 Controller 实现了 OnInit这里的问题是每当我更改路线并返回到同一组件时,每次都会调用 ngOnInit。我做错了什么我无法理解。任何人都请帮助我。 @Component({
当我调用构造函数中注入(inject)的服务时,我得到了未定义的信息。该服务在 ngOnInit 方法中调用,来自 Difference between Constructor and ngOnIni
当我导航到结果组件时,ngOnInit 中的服务按预期工作。然后我打开侧面菜单,导航到另一个页面,然后再次导航到结果页面。但是这次页面不呈现结果。而是呈现 ng-template。控制台上没有错误,什
我正在学习有关 Angular udemy 类(class),并遇到了这段代码。我有一个示例项目,它有一个添加项目按钮,可以在数组中添加一个新项目并在屏幕上显示更新的数组。 shopping-edit
Per Angular(https://angular.io/api/core/OnInit 表示 ngOnInit 在第一次检查指令的数据绑定(bind)属性之后,在检查其任何子项之前调用。它仅在指
我有一个类,它在初始化时从服务中检索数据并填充它的一个属性,它是一个数组。同一个类有一个函数可以对这个数组进行排序、过滤和返回。当我实例化此类的对象并调用此函数时,我意识到它是在其构造函数和 ngOn
Angular 4 应用程序。 我试图制作一个错误页面,以显示有关可能发生的未处理异常的一些信息。 GlobalErrorHandler 拦截最终错误并将用户重定向到由单个 ErrorComponen
只读属性只能在构造函数中赋值,但在 Angular 中,不鼓励甚至有时不可能使用构造函数进行某些初始化,而是使用 Angular 钩子(Hook) ngOnInit。有什么方法可以将 ngOnInit
我注意到当我返回到已经实例化的页面时,ngOnInit() 方法没有被调用。我必须为此使用任何其他方法吗?我需要一种方法,每次他访问特定页面时都会调用该方法。 编辑已经测试过 onPageWillEn
我有一个 Angular 2 应用程序,我使用路由器在 View 之间导航,就像其他人一样。以下是我的特定组件的路径: { path: 'home/view1/:viewID', co
我在同一页面上使用一些查询字符串参数调用 router.navigate。在这种情况下,ngOnInit() 不会调用。是默认设置还是我需要添加任何其他内容? 最佳答案 您可以注入(inject) A
我看过很多关于测试可观察对象的文章,包括 writing marble tests不知何故,我仍然找不到关于如何在我的 ngOnInit 周期中测试组件中的简单可观察对象的直接答案。 ngOnInit
我将 Angular 5 与 SortableJs 结合使用。 在一个页面上,我列出了多张分组的卡片。 HTML 看起来像 Edit 当我将卡片从一个组移到另一
请查看Stackblitz Editor关联。我已经设置了一个 Angular 应用程序。 Angular 应用程序的简要工作概述 两个组件,即应用组件和子组件 最初,子组件不显示。当我们点击按钮时,
我是一名优秀的程序员,十分优秀!