2017-06-16 5 views
4

J'utilise la saveur ES5 de angulaire 2. Et j'ai rencontré cette erreur:Comment trouver les composants en conflit?

Unhandled Promise rejection: Template parse errors: 
More than one component matched on this element. 
Make sure that only one component's selector can match a given element. 
Conflicting components: class2,class6 (" 
    </tbody> 
</table> 
[ERROR ->]<paging [data]="data" (changed)="loadCountries($event)" unit="country"></paging> 
<md-spinner class="lis"): [email protected]:0 ; Zone: <root> ; Task: Promise.then ; Value: 

Il dit class2 et class6. Je ne peux pas trouver les noms originaux des classes.

Voilà ma définition du module:

var module = ng.core.NgModule({ 
    imports: [ 
     ng.platformBrowser.BrowserModule, 
     ng.router.RouterModule.forRoot([].concat([...])), 
     ng.material.MaterialModule, 
     ng.http.HttpModule, 
     ng.common.CommonModule, 
     ng.forms.FormsModule], 
    declarations: [ 
     app.CoalAddWorldCoalSupply, 
     app.FilterValuesDialog, 
     app.CoalFlows, 
     app.ImportWorldCoalSupplies, 
     app.CoalProducts, 
     app.CoalReports, 
     app.CoalUpsertFlow, 
     app.CoalUpsertProduct, 
     app.CoalWorldCoalSupplies, 
     app.CountryList, 
     app.CountryUpsert, 
     app.Dashboard, 
     app.ElectricityHeatGenerations, 
     ... 
     ], 
    entryComponents: [app.FilterValuesDialog, confirmDialog], 
    bootstrap: [app.Layout], 
    providers: [globalService] 
}) 
.Class({ 
    constructor: function() { } 
}); 

document.addEventListener('DOMContentLoaded', function() { 
    ng.platformBrowserDynamic 
     .platformBrowserDynamic() 
     .bootstrapModule(module); 
}); 

parties spécifiées avec ... signifie plus des mêmes choses. Comment comprendre quelle classe est zone.js?

Répondre

5

Disons que nous avons l'application suivante:

app.component.js

app.AppComponent = Component({ 
    selector: 'my-app', 
    template: 
    '<h1>(es5) angular2 4.1.3</h1><comp1></comp1>' 
}) 
.Class({ 
    constructor: function AppComponent() {} 
}); 

component1.js

app.Component1 = Component({ 
    selector: 'comp1', 
    template: 
    'component1' 
}) 
.Class({ 
    constructor: function Component1() {} 
}); 

component2.js

app.Component2 = Component({ 
    selector: 'comp1', 
    template: 
    'component2' 
}) 
.Class({ 
    constructor: function Component2() {} 
}); 

https://plnkr.co/edit/AKBVbX9ruZM8DchFcfbh?p=preview

Alors mes actions:

enter image description here

+1

sooooooooooooo frais. +1 –

+0

Merci beaucoup de faire ce gif et de montrer comment déboguer et trouver les composants en conflit. Je n'aurais pas compris ça par moi-même. Pour mon problème, j'importais une bibliothèque d'interface utilisateur qui exportait MatButtonModule, mais aussi mon projet principal. En déboguant comme ça j'ai pu constater que la bibliothèque de l'interface utilisateur exportait MatButtonModule et que cela créait un conflit car maintenant mon projet avait deux fichiers es5.js qui étaient en concurrence pour rendre ce matériel Module –

+0

J'avoue que je devais regarder le débogage Gif à plusieurs reprises pour voir ce que vous faisiez, mon seul souhait est qu'il ne courait pas si vite, mais j'ai quand même réussi à le suivre et finalement le découvrir. –