问题描述
我有一组react组件,我正在尝试在Angular 2应用中使用它们。
I have a set of react components and i am trying to use them in an Angular 2 app.
这是我要使用的主要React组件
Here is the Main React Component that i am trying to use
import React, {Component} from 'react';
import { createStore, applyMiddleware } from 'redux';
import { Provider } from 'react-redux';
import configureStore from './store/configureStore';
import MyCardContainer from './containers/MyCardContainer';
import './assets/style/main.css';
export default class MyCard extends Component {
constructor(props){
super(props);
}
componentWillMount(){
}
render(){
if(this.props.param1 && this.props.param2) {
return (
<Provider store={configureStore()}>
<MyCardContainer param1={this.props.param1} param2={this.props.param2} key='container'/>
</Provider>
)
}
else{
return(
<div>
Invalid Params are provided for MyCard Component !!
</div>
)
}
}
}
现在在我的角度项目中,我有以下内容文件。
Now in my angular project i have the following files.
app.module.ts
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
import { MyCardHostComponent } from './mycardhost.component';
@NgModule({
declarations: [
AppComponent,
MyCardHostComponent
],
imports: [
BrowserModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
app.component.ts
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'app';
}
app.component.html
app.component.html
<div style="text-align:center">
<h1>
Welcome to React Components Usage Page
</h1>
<div>
<my-card-host></my-card-host>
</div>
<div id="my-card"></div>
</div>
和mycardhost.component.ts
And mycardhost.component.ts
我尝试了OnInit和AfterContentInit。在给定的时间我只有一个活跃的人。最初,我在模板中没有ID为 my-card的div(我在
I tried both OnInit and AfterContentInit . I only had one active at a given time. Initially in the template i didn't have the div with id "my-card" (which i have in
import {Component, ViewChild,ElementRef,AfterContentInit} from '@angular/core';
import {MyCard} from './MyCard';
@Component({
selector: 'my-card-host',
templateUrl:"./mycardhost.component.html"
})
export class MyCardHostComponent implements OnInit, AfterContentInit{
@ViewChild('my-card') myCard: ElementRef;
ngOnInit(){
// MyCard.initialize("param1val","param2val",document.getElementById("my-card"));
}
ngAfterContentInit(){
MyCard.initialize("param1val","param2val",this.myCard.nativeElement);
}
}
和mycardhost.component.html的模板文件,其div标签的ID为 my-card 将在其中加载React组件。
and the template file for the mycardhost.component.html which has the div tag with id "my-card" where the React Component will be loaded.
<div id="my-card"></div>
当我运行应用程序时,React Store和Reducers会被初始化。我如何遇到以下错误:这表明我正在传递的document.getElementById()不是有效的DOM元素。
And when i run the app the React Store and Reducers are getting initialized. How ever i am getting the following Error: Which indicated the document.getElementById() that i am passing is not a valid DOM Element.
我尝试将断点放在Angular Components,它们都没有被执行。不知道我在做什么错。非常感谢您的帮助。
I tried putting break points in the Angular Components and none of them are getting executed. Not sure what i am doing wrong. Really appreciate any help.
Uncaught ZoneAwareError {__zone_symbol__error: Error: _registerComponent(...): Target container is not a DOM element.
at invariant (eval at <an…, …}
Target container is not a DOM element. at invariant (eval at <anonymous> (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1)), <anonymous>:39:15) [<root>] at Object._registerComponent (eval at <anonymous> (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1)), <anonymous>:447:200) [<root>] at Object._renderNewRootComponent (eval at <anonymous> (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1)), <anonymous>:470:34) [<root>] at Object.wrapper [as _renderNewRootComponent] (eval at <anonymous> (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1)), <anonymous>:66:21) [<root>] at Object._renderSubtreeIntoContainer (eval at <anonymous> (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1)), <anonymous>:550:32) [<root>] at render (eval at <anonymous> (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1)), <anonymous>:570:23) [<root>] at wrapper (eval at <anonymous> (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1)), <anonymous>:66:21) [<root>] at eval (eval at <anonymous> (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1)), <anonymous>:54:22) [<root>] at Object.eval (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1), <anonymous>:607:2) [<root>] at __webpack_require__ (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1), <anonymous>:557:30) [<root>] at fn (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1), <anonymous>:88:20) [<root>] at Object.eval (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1), <anonymous>:588:19) [<root>] at __webpack_require__ (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1), <anonymous>:557:30) [<root>] at eval (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1), <anonymous>:580:37) [<root>] at eval (eval at <anonymous> (http://localhost:8080/js/app.js:1873:1), <anonymous>:583:10) [<root>] at Object.<anonymous> (http://localhost:8080/js/app.js:1873:1) [<root>] at __webpack_require__ (http://localhost:8080/js/polyfills.js:53:30) [<root>] at eval (eval at <anonymous> (http://localhost:8080/js/app.js:732:1), <anonymous>:8:27) [<root>] at Object.<anonymous> (http://localhost:8080/js/app.js:732:1) [<root>] at __webpack_require__ (http://localhost:8080/js/polyfills.js:53:30) [<root>] at eval (eval at <anonymous> (http://localhost:8080/js/app.js:760:1), <anonymous>:7:17) [<root>] at Object.<anonymous> (http://localhost:8080/js/app.js:760:1) [<root>] at __webpack_require__ (http://localhost:8080/js/polyfills.js:53:30) [<root>] at eval (eval at <anonymous> (http://localhost:8080/js/app.js:746:1), <anonymous>:13:31) [<root>] at Object.<anonymous> (http://localhost:8080/js/app.js:746:1) [<root>] at __webpack_require__ (http://localhost:8080/js/polyfills.js:53:30) [<root>] at eval (eval at <anonymous> (http://localhost:8080/js/app.js:712:1), <anonymous>:5:20) [<root>] at Object.<anonymous> (http://localhost:8080/js/app.js:712:1) [<root>] at __webpack_require__ (http://localhost:8080/js/polyfills.js:53:30) [<root>] at Object.<anonymous> (http://localhost:8080/js/app.js:1880:18) [<root>] at __webpack_require__ (http://localhost:8080/js/polyfills.js:53:30) [<root>] at webpackJsonpCallback (http://localhost:8080/js/polyfills.js:24:23) [<root>] at http://localhost:8080/js/app.js:1:1 [<root>]
__zone_symbol__name
:
"Invariant Violation"
推荐答案
最后,我能够解决问题。
Finally i am able to resolve the Issue.
我需要更改的只是我导入组件的方式。
All i needed to change was the way i was importing of the Component.
我必须更改以下行
从 my-components-react导入MyCard;
import MyCard from 'my-components-react';
至
从 my-components-react / es / MyCard导入MyCard;
import MyCard from 'my-components-react/es/MyCard';
谢谢
这篇关于在Angular 2中使用React组件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!