我在控制器中有一个执行以下代码的方法:
this.StockService.GetByInvoicesID(this.SelectedInvoice.ID).success((StockItems) =>
{
this.StockItems = StockItems;
this.CreditNoteStockItems = new Array<ViewModels.CreditNoteStockItemViewModel>();
}
在调用此服务方法之前,将定义控制器中的所有成员。但是,一旦承诺解决,this.StockItems和this.CreditNoteStockItems都是未定义的。此外,StockItems的分配没有反映在视图中。我猜这是一个范围问题,并且承诺将重新进入新的范围。这种情况之前已经发生在其他方法中,它几乎似乎是随机发生的。
我的问题是,有谁可以告诉我为什么会发生这种情况,更重要的是,我该如何防止它发生?
编辑:这是我的控制器的简化版本(缺少的是几个成员和方法)
编辑2:有关控制器中方法的更多信息
export class CreditNoteController
{
static $inject = ['$scope', '$modalInstance', 'StockService'];
StockService: Services.StockService;
ModalInstance: ng.ui.bootstrap.IModalServiceInstance;
constructor($scope, $modalInstance, StockService: Services.StockService)
{
$scope.vm = this;
this.ModalInstance = $modalInstance;
this.StockService = StockService;
}
InvoicesSelectionChanged()
{
this.StockService.GetByInvoicesID(this.SelectedInvoice.ID).success((StockItems) =>
{
this.StockItems = StockItems;
this.CreditNoteStockItems = new Array<ViewModels.CreditNoteStockItemViewModel>();
});
}
}
控制器通过坐在另一个控制器中的角度UI模态服务打开方法注入:
this.ModalService.open(
{
templateUrl: URL,
controller: Controllers.CreditNoteController,
});
编辑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();
});
};
谢谢
答案 0 :(得分:0)
在评论主题中经过一些来回,结果发现这里有两件事情,所以将信息整合到答案中:
检查这个&#39;在.ts文件的调试器中,知道您将看到实际的&#39;这个&#39;值,而不是使用箭头函数时在.js文件中创建的_this别名。这有时会让变量看起来没有变得固定,而实际上,你正在检查错误的变量。在_this上设置手表将显示正确的手表。您还可以选择在&#39;这个&#39;上使用console.log。在TypeScript代码本身,因为它将编译为使用_this别名。
ng-options无法使用ng-model