私は次のテンプレートを持つ親コンポーネントを得ました:
<ion-content>
<blocks-banners-slideshow class="contentBlock" [config]="{ zone: 'mobile'}" [config_private]="{ url: 'url'}" [slideOptions]="{ loop: true, pager: true}"></blocks-banners-slideshow>
<blocks-catalog-category class="contentBlock" [config]="{ parent_id: 0 }" [config_private]="{ url: 'url'}"></blocks-catalog-category>
<blocks-catalog-topproducts class="contentBlock" [config]="{ filter: { dir: 204}, page: 1, pageSize: 8}" [config_private]="{ url: 'url', showMoreProducts: false, columns: { tablet: 4, phone: 2}}"></blocks-catalog-topproducts>
</ion-content>
そして、アプリケーションはそれを教えて見せようとします:未処理の約束拒否:
テンプレート解析エラー:
Can't bind to 'config_private' since it isn't a known property of 'blocks-banners-slideshow'.
1. If 'blocks-banners-slideshow' is an Angular component and it has 'config_private' input, then verify that it is part of this module.
2. If 'blocks-banners-slideshow' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message.
子コンポーネントのテキスト:
@Component({
selector: 'blocks-banners-slideshow', //Селектор
templateUrl: '/mobilesiteapp/template/?path=pages/banners/blocks/slideshow', //Шаблон
})
export class BannersBlocksSlideShow extends AbstractBlock{
list: Array<BannerItem>;
mySlideOptions: any;
//Входящие данные
@Input() config: any;
@Input() config_public: any;
@Input() slideOptions = {};
....
}
修正方法
「configs-private」は「blocks-banners-slideshow」の既知のプロパティではないため、バインドできません。
config_private
が見つからないことを意味するため、これを修正するには3つの方法があります。
config_public
からconfig_private
に変更します.html
で、バウンドプロパティをconfig_private
からconfig_public
に変更します最初のオプション-欠落しているプロパティをコンポーネントに追加します
@Component({
selector: 'blocks-banners-slideshow', //Селектор
templateUrl: '/mobilesiteapp/template/?path=pages/banners/blocks/slideshow', //Шаблон
})
export class BannersBlocksSlideShow extends AbstractBlock{
list: Array<BannerItem>;
mySlideOptions: any;
//Входящие данные
@Input() config: any;
@Input() config_public: any;
@Input() config_private: any; // <--- Add this
@Input() slideOptions = {};
....
}
2番目のオプション-コンポーネントで、プロパティをconfig_public
からconfig_private
に変更します
<ion-content>
<blocks-banners-slideshow class="contentBlock" [config]="{ zone: 'mobile'}" [config_private]="{ url: 'url'}" [slideOptions]="{ loop: true, pager: true}"></blocks-banners-slideshow>
<blocks-catalog-category class="contentBlock" [config]="{ parent_id: 0 }" [config_private]="{ url: 'url'}"></blocks-catalog-category>
<blocks-catalog-topproducts class="contentBlock" [config]="{ filter: { dir: 204}, page: 1, pageSize: 8}" [config_private]="{ url: 'url', showMoreProducts: false, columns: { tablet: 4, phone: 2}}"></blocks-catalog-topproducts>
</ion-content>
[config_public]="..."
プロパティがバインドされていないので、コンポーネントのconfig_public
をconfig_private
に変更してみてください
@Component({
selector: 'blocks-banners-slideshow', //Селектор
templateUrl: '/mobilesiteapp/template/?path=pages/banners/blocks/slideshow', //Шаблон
})
export class BannersBlocksSlideShow extends AbstractBlock{
list: Array<BannerItem>;
mySlideOptions: any;
//Входящие данные
@Input() config: any;
@Input() config_private: any; // <--- Change this
@Input() slideOptions = {};
........
}
第3オプション-.html
で、バウンドプロパティをconfig_private
からconfig_public
に変更します
バウンドプロパティをconfig_public
に変更してみてください
<ion-content>
<blocks-banners-slideshow class="contentBlock" [config]="{ zone: 'mobile'}" [config_public]="{ url: 'url'}" [slideOptions]="{ loop: true, pager: true}"></blocks-banners-slideshow>
<blocks-catalog-category class="contentBlock" [config]="{ parent_id: 0 }" [config_public]="{ url: 'url'}"></blocks-catalog-category>
<blocks-catalog-topproducts class="contentBlock" [config]="{ filter: { dir: 204}, page: 1, pageSize: 8}" [config_public]="{ url: 'url', showMoreProducts: false, columns: { tablet: 4, phone: 2}}"></blocks-catalog-topproducts>
</ion-content>
コンポーネントがappsモジュールで宣言されていることを確認してください
app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { BannersBlocksSlideShow } from './banners-blocks-slideShow/banners-blocks-slideShow.component';
@NgModule({
imports: [
BrowserModule
],
declarations: [
AppComponent,
BannersBlocksSlideShow
],
providers: [],
bootstrap: [AppComponent],
})
export class AppModule { }
私にとっては、私が書いたため、このエラーが発生しました
@Input
の代わりに
@Input()
プロパティの前。
遅延読み込みでIonic 2を使用している場合、ページモジュールにブロックの宣言を含めるのを忘れている可能性があります。この場合、エラーは同じになります。
私は彼が言ったことは私の問題だと思うので、アレクサンダー・ザクシロの答えを少し広げたいと思いますが、それはすぐにはクリックしませんでした...
すばらしい スタックオーバーフローポスト Ionic 3の遅延読み込みについて、ドキュメントへのリンクが含まれています...
コンポーネントモジュールにグループ化された多数のコンポーネントがあるとしましょう。
const components = [
GraphLineComponent,
GraphDateRangeTabsComponent,
GraphBarComponent,
];
@NgModule({
declarations: [
...components,
],
imports: [IonicModule],
exports: [
...components,
]
})
export class ComponentsModule {}
そして、遅延ロードしているionicページでこれらのコンポーネントの1つを使用します...コンポーネントを使用するページモジュールにコンポーネントモジュールをインポートする必要があります。
@NgModule({
declarations: [
GraphPage,
],
imports: [
IonicPageModule.forChild(GraphPage),
ComponentsModule,
],
})
export class GraphPageModule {}
私の問題は、コンポーネントモジュールをブートストラップされたアプリモジュールにインポートし、動作することを期待していたことでした。また、遅延読み込みではない場合は、すべてがアプリモジュールに存在するため、読み込みが行われます。