问题标签 [ngoninit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
140972 浏览

angular - Angular2的ngOnInit和ngAfterViewInit有什么区别?

ngOnInit我不明白和之间有什么区别ngAfterViewInit

我发现它们之间的唯一区别是@ViewChild. 根据下面的代码,elementRef.nativeElement它们是相同的。

我们应该使用什么场景ngAfterViewInit

0 投票
2 回答
12415 浏览

angular - 使用初始化值触发 valueChange - angular2

我正在编写一个 angular2 应用程序,但我遇到了一些问题。首先,我有一个绑定到 a 的选择formControl

所以,myControlformControl, 并且profilesBy是一个数组的 Observable。只需使用 select 的值格式化查询的主体并
返回请求(即:http.post(url, body) ...)。 然后我分配响应: 但不要考虑太多。formatQuerygetGroupByhttp
res.json().aggregations.group_by_type.buckets

这是我的模板:

当用户选择一个值时它工作得很好,它触发valueChanges并链接动作!

所以我很高兴。我认为这是一种优雅的方式,而不是使用ngOnChanges()

现在在这里我找不到使它起作用的方法。基本上,我想用一个值初始化选择并触发(没有任何用户操作)valueChange

我尝试使用 [(ngModel)] :<select [formControl]="myControl" [(ngModel)]="selectedGroupBy"> 但它没有触发它。

最后,我尝试在方法中自己拨打电话ngOnInit()

但我得到了一个Array而不是一个Observable of Array!我想念什么?我怎样才能让它工作?


使用startWith 的可能解决方案

0 投票
1 回答
7031 浏览

angular - Angular2:当路由参数改变时调用方法/ngoninit

现在我正在做一个网上商店,在我的主页上,我有一个类别的下拉列表,比如说父猫 A,子猫 B 和 C。

Cat A、B 和 C 都由 1 个组件 CatAComponent 表示。当我第一次进入其中一只猫时,我的 ngoninit 被调用并且页面显示它需要显示的内容。

当我想点击另一个子猫时,我仍然在同一个组件上,但只有一个路由参数发生变化(例如我在 localhost:123/CatA/CatB,现在我在 localhost:123/CatA /CatC,仅更改了一个参数,因此不会调用 ngOnInit 并且我的更新方法也不会被调用)。

有什么办法可以解决这个问题吗?我无法在我的视图文件中放置(单击)方法来引用该方法,类别菜单位于另一个视图组件中。

当只有一个参数发生变化时,我可以调用 NgOnInit 吗?

0 投票
2 回答
2474 浏览

angular - Angular2在视图加载之前从后端加载数据

我已经编写了这样的服务代码以从后端读​​取

以及加载数据的代码

但是在这里它在视图加载后获取数据,所以它给出了错误。

如何在视图加载之前加载数据?

0 投票
14 回答
118785 浏览

angular - 同一页面时,Router Navigate 不调用 ngOnInit

我正在router.navigate使用一些查询字符串参数在同一页面上调用。在这种情况下,ngOnInit()不调用。是默认设置还是我需要添加其他内容?

0 投票
1 回答
507 浏览

angular - Angular 2 - 在 ngOnInit() 中订阅的 observable 太多

我有一个巨大的模型驱动表单,它的字段可能会影响彼此的行为,例如:

如果字段 A 的值发生变化,则应从服务器获取字段 B 的值,或者如果字段 C 的值发生变化,则应禁用字段 D 等。

为了检测我使用valueChanges的变化:

(请注意,我不能说this.form.valueChanges,因为我的表单有大约 50 个字段)。一切看起来都很好,但这种方法让我ngOnInit()有点乱。我的问题是:

对于这种情况,有没有更好/更有效的解决方案?在 ngOnInit 中订阅过多的 observables 不会产生任何问题?如何改进我的代码?

0 投票
2 回答
6000 浏览

angular - Angular2 路由问题和 ngOnInit 调用了两次

我在使用 Angular 2 路由时遇到了一个非常奇怪的问题,我ngOnInit在路由到的组件中被调用了两次,并且浏览器中的路由被重置为原始路由。

我有一个NotificationListComponentNotificationEditComponent一个MaintenanceModule

在我的根目录AppModule中,我设置RouterModule将任何未映射的路由重定向到/maintenance/list.

app.module.ts

/maintenance/list在 my 中定义了MaintenanceModule指向 myNotificationListComponent的路线,以及/maintenance/edit/:id指向 my 的路线NotificationEditComponent

维护.module.ts

当我的应用程序加载时,它会正确地遵循/maintenance/list路线,并且我可以在列表中看到我的所有通知。对于列表中的每个通知,都有一个编辑图标,它的click事件绑定到edit(id: number)我的方法NotificationListComponent

通知列表.component.ts

通知列表.component.html

如您所见,该edit(id: number)方法应导航到该/maintenance/edit/:id路线。当我单击图标导航到该路线时,浏览器会在地址栏中闪烁正确的路线(例如localhost:4200/#/maintenance/edit/2),但随后地址栏中的路线立即变回localhost:4200/#/maintenance/list。即使/maintenance/list地址栏中返回的路由,我NotificationEditComponent在实际应用中仍然可见。但是,我可以看到该ngOnInit方法在 my 中被调用了两次NotificationEditComponent,因为两次id被记录到控制台,如果我在ngOnInit函数中放置一个断点,它会两次命中该断点。

通知-edit.component.ts

这似乎也导致了其他问题,因为当尝试将input值绑定到我NotificationEditComponent使用的值时,例如[(ngModel)]="notification.notificationId",该值没有显示在屏幕上,即使我可以看到 Augury chrome 扩展,以及记录对象到控制台,该值已填充到组件中。

通知-edit.component.html

有谁知道为什么会这样?

更新:

我删除了对 的调用NotificationService,并用一些模拟数据替换它们,然后路由开始工作!但是,一旦我向我的服务添加调用,我就会遇到上面描述的相同问题。我什至删除了CoreModule并将服务直接添加到我的MaintenanceModule中,但每当我使用实际服务而不是模拟数据时,仍然会遇到同样的问题。

notification.service.ts

NotificationEditComponent而且服务似乎运行良好 - 我可以看到端点成功返回数据,并且当我使用 Augury chrome 扩展程序查看我的数据时,我可以看到数据看起来正确。但是数据没有显示在模板中,/maintenance/list即使/maintenance/edit/:id仍然显示路由的模板,URL 中的路由也会返回。

更新 2:

正如@user3249448 所建议的,我将以下内容添加到我AppComponent的调试中:

这是我单击“编辑”链接之一时的输出:

路由记录

0 投票
0 回答
1397 浏览

angular - 如何仅在 ngOnInit 中设置每个输入值后触发 ngOnChanges

只有在 ngOnInit 中设置了每个输入值后,我才能触发 ngOnChanges。我的代码-->

我不会在 ngonchanges 中得到我在 ngonit 中初始化的数组,因为 ngonchanges 在 ngonit 之前被调用,我如何在检查 ngonchanges 之前检查是否所有都已初始化?

0 投票
0 回答
749 浏览

angularjs - ngOnInit 方法调用了两次

我对 Angular 有点陌生:

当我加载我的 Angular 应用程序 (Angular 4) 时,即使没有渲染特定组件的 ngOnInit() 方法,它也会被调用。在我将应用导航到呈现此组件的路由后,再次调用了 ngOnInit()。这是为什么?这是某种错误,还是它是这样工作的?控制台中没有错误。

(因此,在我的组件的 ngOninit() 中,订阅方法运行了两次。)

更新:

报价信息.component.ts:

在 page-packages.component.html 中:

在 app-routing.module.ts 中:

0 投票
3 回答
83 浏览

angular - 检查身份验证状态并重定向用户

在我的应用程序组件中,我想检查用户是否在加载后立即通过身份验证,如果没有立即将用户重定向到公共页面,而不是加载主页(个人资料)页面。我正在使用可以在此处找到的 Auth0 服务:链接到 GitHub 文件

问题是,我应该在 inconstructor还是 in 中运行它ngOnInit,为什么?