承诺返回后angularjs控制器成员未定义

承诺返回后angularjs控制器成员未定义,angularjs,typescript,Angularjs,Typescript,我在控制器中有一个方法,它执行以下代码: this.StockService.GetByInvoicesID(this.SelectedInvoice.ID).success((StockItems) => { this.StockItems = StockItems; this.CreditNoteStockItems = new Array<ViewModels.CreditNoteStockItemViewModel>(); } 编辑2:它生成的java

我在控制器中有一个方法,它执行以下代码:

this.StockService.GetByInvoicesID(this.SelectedInvoice.ID).success((StockItems) =>
{
    this.StockItems = StockItems;
    this.CreditNoteStockItems = new Array<ViewModels.CreditNoteStockItemViewModel>();
}
编辑2:它生成的javascript

CreditNoteModalController.prototype.InvoicesSelectionChanged = function () {
    var _this = this;                      

    this.StockService.GetByInvoicesID(this.SelectedInvoice.ID).success(function (StockItems) {
             _this.StockItems = StockItems;                        
             _this.CreditNoteStockItems = new Array();                       
         });
};

谢谢你在评论帖子里来回转述了几次之后,发现这里发生了两件事,所以将信息整合到答案中:

  • 在.ts文件中的调试器中检查“this”时,要知道您将看到实际的“this”值,而不是使用箭头函数时在.js文件中创建的_this别名。这有时会使变量看起来没有设置,而实际上,您检查的变量是错误的。把手表放在上面,这会显示正确的。您还可以在TypeScript代码本身中使用console.log on“this”,因为它将使用_this别名编译为

  • 如果没有ng模型,ng选项将无法工作


  • 可能不是成功手柄中您认为的那样。您能演示一下如何定义和使用此控制器吗?我在帖子中添加了有关控制器的更多信息。@charlietfl,TypeScript在箭头函数表达式中重新定义引用此的代码。当转换为JavaScript类型时,脚本将在调用之前添加一个声明
    var\u this=this
    ,然后箭头函数变成
    \u this.StockService
    ,应该可以工作。请发布更多的
    CreditNoteController
    。上面的代码究竟是如何进入
    CreditNoteController
    的?如果你把它完全按照上面所说的那样放在上面所说的位置上,你最终会得到无效的打字脚本。它需要包装在一个方法中。请同时发布相关生成的JavaScript。
    这个
    被翻译成了
    \u这个
    应该是这样的吗?
    this.ModalService.open(
    {
        templateUrl: URL,
        controller: Controllers.CreditNoteController,
                   });  
    
    CreditNoteModalController.prototype.InvoicesSelectionChanged = function () {
        var _this = this;                      
    
        this.StockService.GetByInvoicesID(this.SelectedInvoice.ID).success(function (StockItems) {
                 _this.StockItems = StockItems;                        
                 _this.CreditNoteStockItems = new Array();                       
             });
    };