在Angular 中使用cdkDropListData时出错,我无法绑定到‘cdkDropListData’,因为它不是‘div’的已知属性

rekjcdws  于 2022-10-24  发布在  Angular
关注(0)|答案(4)|浏览(222)
<div
                      cdkDropList
                      #girlList="cdkDropList"
                      [cdkDropListData]="girls"
                      [cdkDropListConnectedTo]="[convaList]"
                      class="example-list"
                      (cdkDropListDropped)="drop($event)"><div class="card color-challenging mb-2" *ngFor="let girls_data of girls" cdkDrag>
                      <div class="card-body p-2 justify-content-between align-items-center d-flex">
                        <span class="reading-grade font-weight-bold">{{girls_data.id}}</span>
                        <div class="student-grade flex flex-grow-1">
                          <p class="justify-content-between align-items-center d-flex">
                            <span class="student-name">{{girls_data.firstName}}{{girls_data.lastName}}</span>
                            <span>{{girls_data.gender}}</span>
                          </p>
                          <p class="justify-content-between align-items-center d-flex">
                            <span>{{girls_data.currentAcademicYear}}</span>
                            <span><i class="fa fa-ban" aria-hidden="true"></i> <i class="fa fa-paperclip" aria-hidden="true"></i></span>
                          </p>
                        </div>
                        <span class="behavior-grade text-right font-weight-bold">{{girls_data.inGrade}}</span>
                      </div>
                    </div>

使用[cdkDropListData]时,在控制台上出现错误,无法绑定到‘cdkDropListData’,因为它不是‘div’的已知属性。

我是新手,所以请避免新手行为

我已经在mode.ts中导入了CDkDragDrop
这是组件文件。

import {Component, NgModule} from '@angular/core';
import {StudentModel} from '../model/studentRepository.model';
import {Student} from '../model/student.model';
import {CdkDragDrop, DragDropModule, moveItemInArray, transferArrayItem} from '@angular/cdk/drag-drop';

@Component({
  selector: 'student-selector',
  templateUrl: 'studentSelector.component.html',
  styleUrls: ['./studentSelector.component.css']
})

export class StudentSelector {
  boys =  [];
  girls = [];
  constructor(private dataModel: StudentModel) {
    this.boys = dataModel.getStudents();
    this.girls = dataModel.getStudents();

  }
  get students(): Student[] {
    return this.dataModel.getStudents();
  }
  conva = [];

  drop(event : CdkDragDrop<string[]>){
    transferArrayItem(event.previousContainer.data,
      event.container.data,
      event.previousIndex,
      event.currentIndex);
  }
}

这是模块文件。

import {NgModule} from '@angular/core';
import { StudentModel } from './studentRepository.model';
import { SimpleDataSource } from './datasource.model';
import {DragDropModule} from '@angular/cdk/drag-drop';

@NgModule({
  providers: [StudentModel,SimpleDataSource],
  imports : [DragDropModule]
})

export class ModelModule {

}
zd287kbt

zd287kbt1#

导入应该是这样的:

import {NgModule} from '@angular/core';
import { StudentModel } from './studentRepository.model';
import { SimpleDataSource } from './datasource.model';
import {DragDropModule} from '@angular/cdk/drag-drop';

@NgModule({
  providers: [StudentModel,SimpleDataSource],
  imports : [DragDropModule]
})

export class ModelModule {

}

和(请参阅代码中的注解)

import {Component} from '@angular/core';    <= NgModule removed
import {StudentModel} from '../model/studentRepository.model';
import {Student} from '../model/student.model';
import {CdkDragDrop, moveItemInArray, transferArrayItem} from '@angular/cdk/drag-drop';     <= DragDropModule removed

@Component({
  selector: 'student-selector',
  templateUrl: 'studentSelector.component.html',
  styleUrls: ['./studentSelector.component.css']
})

export class StudentSelector {
  ...
}

一般情况下:
XxxModule应仅在模块级别导入,而不应在组件级别导入。
另外,正如我在评论中提到的:
看起来您的StudentSelectorModelModule位于不同的模块中(至少它不是您提供的声明的一部分)。一个组件只能在声明它的模块(声明列表)中使用,或者只能在导入另一个模块的模块中使用,该模块反过来声明该组件并将其导出(exports-list)。

wqsoz72f

wqsoz72f2#

在您的应用程序模块中导入此内容

import { DragDropModule} from '@angular/cdk/drag-drop';

然后重新运行应用程序。

vfwfrxfs

vfwfrxfs3#

1.最有可能的问题是没有导入正确的模块。

  • import { DragDropModule} from '@angular/cdk/drag-drop';

1.尽管如此,如果有人面临这个问题,则意味着您尚未在任何模块(例如:App.module.ts)中声明您的组件,因为此属性需要模块声明。

  • (例如:如果有人使用ComponentFactoryResolver打开组件,则不需要在app.module中声明,而是使用‘[cdkDropListData]’,需要声明app.module)
sbtkgmzw

sbtkgmzw4#

这不是非常技术性的解决方案,但我遇到的事情很少。

1.在加载页面之前清除缓存(如果您通常不清除缓存)。有时,它无法将数据提取到变量。
2.修复当前页面的运行时错误(可能在另一个块中,但在同一个页面中)。

但我已经面对了第一个问题。当我清除缓存时,它起作用了。

相关问题