2017-02-19 95 views
6

我剛安裝使用NG2 CLI一bearbones NG2應用。在我AppModule我加schema: [ CUSTOM_ELEMENTS_SCHEMA ],並在我的AppComponent模板我有<row></row>。但我getting-Angular2 CUSTOM_ELEMENTS_SCHEMA不起作用

未處理的承諾拒絕:模板解析錯誤: 「行」不是一個已知的元素: 1.如果「行」是一種角組件,然後驗證它是這部分模塊。 2.如果「行」是一個Web組件,然後添加「CUSTOM_ELEMENTS_SCHEMA」到「@ NgModule.schemas」這個成分對抑制此消息。 (「[錯誤 - >]

AppModule-

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; 
import { FormsModule } from '@angular/forms'; 
import { HttpModule } from '@angular/http'; 

import { AppComponent } from './app.component'; 


@NgModule({ 
    declarations: [ 
    AppComponent 
    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule 
    ], 
    providers: [], 
    bootstrap: [AppComponent], 
    schemas: [ CUSTOM_ELEMENTS_SCHEMA ] 
}) 
export class AppModule { } 

AppComponent-

import { Component } from '@angular/core'; 

@Component({ 
    selector: 'app-root', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.css'] 
}) 
export class AppComponent {} 

AppComponentTemplate-

<row></row> 

它就是這麼簡單到底是什麼打算。 on?

編輯:

以下所有的答案是令人滿意的,並提供洞察問題。 @yurzui我特別喜歡你提供源代碼的答案。我希望我能給你所有的答案!但我會選擇@camaron作爲第一個,並直接解決我的問題。如果你通過google找到這個問題,請給@yurzui,@camaron和@Aravind一個幫助解決這個問題的+1!

回答

9

您需要添加RowComponent由您AppModule

imports: [RowComponent]

編輯導入:

使用NO_ERRORS_SCHEMA,這是因爲角度試圖尋找不存在的成分。

CUSTOM_ELEMENTS_SCHEMA是用於與在所述選擇名稱的-組件。

+0

我沒有'RowComponent',就是這個問題。它不打算成爲一個組件,它只是一個隨機元素名稱。 –

+0

嘗試使用NO_ERRORS_SCHEMA作爲最後一個資源 –

+0

是的,它的工作原理。我希望我知道爲什麼CUSTOM_ELEMENTS_SCHEMA不起作用。如果沒有人能回答這個問題,我會選擇這個作爲答案 –

5

如果您解析未知屬性中看一看的changelog https://github.com/angular/angular/blob/master/CHANGELOG.md#200-rc5-2016-08-09

默認情況下,角就會報錯, 甚至如果他們在一個元素 - 在他們的名字(又名定製 elements)。如果您的應用程序使用自定義元素,請使用值[CUSTOM_ELEMENTS_SCHEMA]填寫新的 參數@ NgModule.schemas。

那麼你就可以明白,你需要有標籤與-分隔符

if (tagName.indexOf('-') > -1) { 
     if (tagName === 'ng-container' || tagName === 'ng-content') { 
     return false; 
     } 

     if (schemaMetas.some((schema) => schema.name === CUSTOM_ELEMENTS_SCHEMA.name)) { 
     // Can't tell now as we don't know which properties a custom element will get 
     // once it is instantiated 
     return true; 
     } 
} 

https://github.com/angular/angular/blob/2.4.8/modules/%40angular/compiler/src/schema/dom_element_schema_registry.ts#L290

所以像my-row應該工作

+0

我真的很感激鏈接到源! +1 –

3

以下是你的錯誤

  1. 您僅輸入了AppComponent,但它沒有任何包含<row>作爲其模板的元素。
  2. CUSTOM_ELEMENTS_SCHEMA在應用程序開發過程中不需要使用,因爲它用於隱藏在解析模板(如錯誤描述中所述)時發生的錯誤。
  3. <app-root>是您的AppComponent的選擇器,但您在AppComponent的html中使用了<row>

根據您的要求,我可以提出各種修補程序。評論你想要的結果,我會根據他們更新答案。