首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重用angular 4组件

如何重用angular 4组件
EN

Stack Overflow用户
提问于 2017-06-29 03:39:53
回答 1查看 4.3K关注 0票数 0

我在我的项目中使用了primeNG (https://www.primefaces.org/primeng)的一些组件。这些组件有自己的属性和事件。

我有时可能会定制这些组件,所以我创建了自己的组件来导入这些组件,但是当访问我的组件时,我不能使用primeng组件的属性和事件。

我是否正确地重用了这些组件?在Angular 4项目中拥有可重用组件的正确方法是什么?

为了更好地理解:

我有一个名为checkbox的组件

.HTML

代码语言:javascript
复制
<div>
    <p-checkbox [ngModel]="check" (ngModelChange)="onChange($event)"  binary="true"></p-checkbox>
</div>

.TS

代码语言:javascript
复制
import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';


@Component({
  selector: 'app-input-checkbox',
  templateUrl: './checkbox.component.html',

})

export class CheckBoxComponent implements OnInit {

  @Input()  check: boolean;
  @Output() checkChange: EventEmitter<boolean> = new EventEmitter();

  onChange($event) {
      this.check = $event;
      this.checkChange.emit($event);
  }

  ngOnInit() {
  }

}

我可以这样重用:

代码语言:javascript
复制
<app-input-checkbox [(check)]="input.read">  </app-input-checkbox>

但我不能以这种方式使用primeng属性

代码语言:javascript
复制
<app-input-checkbox [(check)]="input.read" [disabled]="true">  </app-input-checkbox>

如何正确使用primeng中的所有属性?

应用程序模块:

代码语言:javascript
复制
import { AppRoutingModule } from './app.routing.module';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpModule } from '@angular/http';
import { RouterModule } from '@angular/router';
import { FormsModule } from '@angular/forms'; // <-- NgModel lives here
// import {NgbModule} from '@ng-bootstrap/ng-bootstrap'
import {BrowserAnimationsModule} from '@angular/platform-browser/animations';


import {
  InputTextModule, CheckboxModule, DropdownModule,
  ToolbarModule, SpinnerModule,
  ButtonModule,
  AccordionModule,
  DialogModule,
  InputTextareaModule} from 'primeng/primeng';
import { AppComponent } from './app.component';

// Shared Folder
import { NavBarComponent } from './shared/nav-bar/nav-bar.component';
import { HeaderComponent } from './shared/header/header.component';
import { CheckBoxComponent } from './shared/input/checkbox/checkbox.component';
import { InputTextComponent } from './shared/input/text/text.component';


import { UserPermissionsComponent } from './components/user-permissions/user-permissions.component';

@NgModule({
  declarations: [
    AppComponent,
    NavBarComponent,
    HeaderComponent,
    InputTextComponent,
    CheckBoxComponent
  ],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    AppRoutingModule,
    InputTextModule,
    CheckboxModule,
    DropdownModule,
    ToolbarModule,
    ButtonModule,
    AccordionModule,
    SpinnerModule,
    InputTextareaModule,
    HttpModule,
    DialogModule,
    RouterModule.forRoot([
      {
        path: 'administration',
        component: AccordionAdministrationComponent
      },
      {
        path: 'permission',
        component: AccordionPermissionComponent
      }
    ]),
    FormsModule, // <-- import the FormsModule before binding with [(ngModel)]
    // NgbModule.forRoot()
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-29 04:11:32

改变这一点

代码语言:javascript
复制
 <app-input-checkbox [(check)]="input.read" [disabled]="true">  </app-input-checkbox>

有了这个

代码语言:javascript
复制
<app-input-checkbox [check]="input.read" (checkChange)="methodInParentComponent($event)" [disabled]="true">  </app-input-checkbox>

check是输入属性,你不能put (check)它是错误的,你用output属性定义了你想要传递给父组件的数据。

将输入属性disabled添加到组件

代码语言:javascript
复制
@Input() disabled;

并将属性disabled添加到复选框primeng组件中

代码语言:javascript
复制
<p-checkbox [(ngModel)]="value" binary="true" [disabled]="disabled"> </p-checkbox>

添加到app.module

代码语言:javascript
复制
import {CheckboxModule} from 'primeng/primeng';

和在导入中

代码语言:javascript
复制
imports: [..., CheckboxModule] 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44811222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档