【问题标题】:Angular2 equivalent of ReactDOM.renderAngular2 等价于 ReactDOM.render
【发布时间】:2025-12-14 02:10:01
【问题描述】:

背景

启动一个 ReactJS 组件的正常方式是:

ReactDOM.render(<MyComponent />, document.getElementById('root'));

启动一个Angular2组件的正常方式是:

platformBrowserDynamic().bootstrapModule(MyModule);

MyModule 在 'declarations' 和 'bootstrap' 下注册了 MyComponent。 MyModule 也可能包含一些服务。 MyComponent 本身定义了 HTML 选择器。

问题

Angular2 方式调用了一些 ReactJS 方式没有的问题:

  1. 在页面生命周期的后期,如何在页面的另一部分第二次渲染 MyComponent?
  2. 如何首先检索和使用模块中的服务,并且仅在需要时才呈现 MyComponent?

(对于您的答案,请考虑它是在 angular2 执行上下文之外还是在内部工作,如果有影响的话)

【问题讨论】:

    标签: angular reactjs components


    【解决方案1】:

    1.
    您不想重用 RootComponent,因为这会导致堆栈溢出异常。这会发生,因为 RootComponent (显然)是您的应用程序根。将 RootComponent 放入 RootComponent 会导致永远不会停止的递归调用。

    2.
    不知道我是不是在这里误会了你,如果误会了,请发表评论,我会再次尝试解释。

    您可以在您的 RootComponent 中使用任何声明的服务(以及属于 NgModule 的任何其他类)。 Angular 中的每个组件都有定义的生命周期钩子 (https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html),您可以使用它们。例如,如果您对此感兴趣,可以在初始化 RootComponent 之前使用您的服务。请参阅此示例:

    import { Component, OnInit } from '@angular/core';
    import { MyService } from '../Shared/my-service';
    
    @Component({
        selector: 'app-root',
        templateUrl: './app.component.html',
        styleUrls: ['./app.component.css']
    })
    export class AppComponent implements OnInit {
    
        constructor(private _service: MyService) {
            // This is executed before ngOnInit()
            this._service.doStuff();
        }
    
        ngOnInit() {
            // Here we can do more stuff when the component is "starting"
            this._service.doMoreStuff();
        }
    }
    

    【讨论】:

    • 1.您假设我在现有的 Angular 上下文中运行它。如果我想在网页的另一部分不由 Angular 管理,例如在引导模式中再次显示它怎么办?
    • 2.您假设我有一个放置组件的地方。如果我想问服务,如果它不知道答案,那么打开一个引导模式并初始化其中的组件以询问用户输入怎么办?
    • 顺便说一句,这些不是人为的场景,这些是实际用例。
    • 我可能会添加 ReactJS 中的琐碎。
    • 我感觉您没有使用过 angular 2,并且正试图将 reactjs 的思维定式压缩到一个没有真正意义的上下文中。引导并且不是动态玩耍的地方。所有这些场景都应该真正发生在 RootComponent 内部。 Angular 组件存在于 Angular 上下文中。