TypeError:无法读取 Object.stop anguar 5 处未定义的属性“UpdateXY”

Posted

技术标签:

【中文标题】TypeError:无法读取 Object.stop anguar 5 处未定义的属性“UpdateXY”【英文标题】:TypeError: Cannot read property 'UpdateXY' of undefined at Object.stop anguar 5 【发布时间】:2018-10-19 04:38:44 【问题描述】:

我有一个 HomeComponent:

@Component(
  selector: 'gridster-general',
  templateUrl: './home.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush,
  encapsulation: ViewEncapsulation.None
)

这是导出类,它包含 gridster 仪表板的初始化:

export class HomeComponent implements OnInit 

  options: GridsterConfig;
  dashboard: Array<GridsterItem>;
  widget:any;

  constructor(private dataService:DataService ) 
   

  ngOnInit() 
    this.options = 
      gridType: GridType.ScrollVertical,
      compactType: CompactType.None,
      margin:10,
      outerMargin: true,
      outerMarginTop: null,
      outerMarginRight: null,
      outerMarginBottom: null,
      outerMarginLeft: null,
      mobileBreakpoint: 640,
      minCols: 1,
      maxCols: 10,
      minRows: 1,
      maxRows: 100,
      maxItemCols: 100,
      minItemCols: 1,
      maxItemRows: 100,
      minItemRows: 1,
      maxItemArea: 2500,
      minItemArea: 1,
      defaultItemCols: 1,
      defaultItemRows: 1,
      fixedColWidth: 105,
      fixedRowHeight: 105,
      keepFixedHeightInMobile: false,
      keepFixedWidthInMobile: false,
      scrollSensitivity: 10,
      scrollSpeed: 20,
      enableEmptyCellClick: false,
      enableEmptyCellContextMenu: false,
      enableEmptyCellDrop: false,
      enableEmptyCellDrag: false,
      emptyCellDragMaxCols: 50,
      emptyCellDragMaxRows: 50,
      ignoreMarginInRow: false,
      draggable: 
        enabled: true,     
        stop:
        function (event, $element, widget) 

          this.widget = 
            x:$element.$item.x,
            y:$element.$item.y
          
          HomeComponent.prototype.dataService.UpdateXY(this.widget);
        

      ,...

我使用了HomeComponent.prototype,因为我无法使用this.dataService 访问dataService 变量

我正在尝试获取小部件在 angular 5 gridster 中的位置并将其保存在我的数据库中。 数据服务是与我的数据库交互的服务,UpdateXY() 是一个使用 post 方法将信息保存在数据库中的函数。 我收到此错误:

ERROR TypeError: Cannot read property 'UpdateXY' of undefined
    at Object.stop (home.component.ts:106)
    at GridsterDraggable.dragStop (gridsterDraggable.service.ts:158)
    at HTMLDocument.eval (platform-browser.js:2628)
    at ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:4751)
    at ZoneDelegate.invokeTask (zone.js:420)
    at Zone.runTask (zone.js:188)
    at ZoneTask.invokeTask [as invoke] (zone.js:496)
    at invokeTask (zone.js:1540)
    at HTMLDocument.globalZoneAwareCallback (zone.js:1566)

谁能帮我解决这个问题

【问题讨论】:

行内内容:home.component.ts 的第 106 行? HomeComponent.prototype.dataService.UpdateXY(this.widget);我认为问题在于从停止函数内部调用数据服务,当我从外部调用它时,就像在 onInit() 中它工作正常 分享更多代码。我在您的代码中看不到registerUser。难以调试 对不起,我分享了错误的错误,它是 UpdateXY() 而不是 RegisterUser 你为什么要以这种方式调用服务HomeComponent.prototype.dataService. ??分享什么更好的代码,否则你不会在这里得到解决方案。请查看 SO 规则 【参考方案1】:

解决了,而不是 ;

stop:
        function (event, $element, widget) 

          this.widget = 
            x:$element.$item.x,
            y:$element.$item.y
          
          HomeComponent.prototype.dataService.UpdateXY(this.widget);
        

正确的格式是:

 stop: (event, $element, widget) => 

          this.widget = 
            x:$element.$item.x,
            y:$element.$item.y
          
       this.dataService.UpdateXY(this.widget);

【讨论】:

以上是关于TypeError:无法读取 Object.stop anguar 5 处未定义的属性“UpdateXY”的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:无法读取未定义的属性(读取“国家”)

TypeError:无法读取未定义的属性(读取“名称”)

TypeError:无法读取属性“集合”[重复]

TypeError:无法读取 null 的属性(读取“发射”)

TypeError:无法读取未定义的属性(读取“匹配”):

TypeError:无法读取未定义的属性(读取“createContext”)