Javascript 使用typescript从回调中获取控制器引用
我有下面这个简单的控制器,它使用一个指令/组件并将一个函数作为绑定传递 调用该函数时,我没有使用任何控制器类服务的引用 在这种情况下,在我的控制器Javascript 使用typescript从回调中获取控制器引用,javascript,angularjs,angularjs-directive,typescript,angularjs-components,Javascript,Angularjs,Angularjs Directive,Typescript,Angularjs Components,我有下面这个简单的控制器,它使用一个指令/组件并将一个函数作为绑定传递 调用该函数时,我没有使用任何控制器类服务的引用 在这种情况下,在我的控制器public onTileClicked功能中,我没有访问tileService的权限 控制器js: namespace app.dashboard { 'use strict'; export class DashboardController { static $inject:Array<string>
public onTileClicked
功能中,我没有访问tileService的权限
控制器js:
namespace app.dashboard {
'use strict';
export class DashboardController {
static $inject:Array<string> = ['$q', 'logger', 'tileService'];
constructor(private $q:ng.IQService,
private tileService:TileService) {
}
public tiles:Array<ITile> = [];
public onTileClicked(tile:ITile) {
this.tileService.getTiles(tile.ID) // No access to tileService
.then((data)=> {
this.tiles = data; // Won't have access to this.tiles
})
}
}
angular
.module('app.dashboard')
.controller('DashboardController', DashboardController);
}
您对函数的绑定(html)错误。你错过了括号:
<tile-component ng-repeat="tile in DashboardCtrl.tiles" tile="tile"
on-tile-clicked="DashboardCtrl.onTileClicked()"> <!-- HERE -->
</tile-component>
您对函数的绑定(html)错误。你错过了括号:
<tile-component ng-repeat="tile in DashboardCtrl.tiles" tile="tile"
on-tile-clicked="DashboardCtrl.onTileClicked()"> <!-- HERE -->
</tile-component>
谢谢,当我在tile clicked=“DashboardCtrl.onTileClicked(tile)”上添加时,这很有帮助,但现在我无法访问承诺中的this:this.tiles=data;您能提供帮助吗?如果您使用lambda样式的函数,这将引用您的DashboardController实例。你能确认你使用的是lamdba风格吗?如果是,您可以使用以下代码测试您的函数:public-onTileClicked(tile:ITile){var-self=this;this.tileService.getTiles(tile.ID)//无法访问tileService。然后((data)=>{self.tiles=data;//将无法访问this.tiles}它在工作,但它是如此丑陋,没有其他办法?哦,是的!我理解:)当你使用调试器(在chrome、safari、IE、edge…)时,你会使用JavaScript调试器(即使你看到你的typescript代码)。因此,lambda函数的typescript中的“this”键与JavaScript中的“this”键不同。如果在调试typescript lamdba函数时需要“this”关键字的值,则必须查看JavaScript“\u this”变量。谢谢,当我在tile clicked=“DashboardCtrl.onTileClicked(tile)”上添加时它很有帮助,但现在我无法访问promise中的this:this.tiles=data;您能提供帮助吗?如果您使用lambda样式的函数,这将引用您的DashboardController实例。你能确认你使用的是lamdba风格吗?如果是,您可以使用以下代码测试您的函数:public-onTileClicked(tile:ITile){var-self=this;this.tileService.getTiles(tile.ID)//无法访问tileService。然后((data)=>{self.tiles=data;//将无法访问this.tiles}它在工作,但它是如此丑陋,没有其他办法?哦,是的!我理解:)当你使用调试器(在chrome、safari、IE、edge…)时,你会使用JavaScript调试器(即使你看到你的typescript代码)。因此,lambda函数的typescript中的“this”键与JavaScript中的“this”键不同。如果在调试typescript lamdba函数时需要“this”关键字的值,则必须查看JavaScript“\u this”变量。
DashboardController.prototype.onTileClicked = function (tile) {
var _this = this;
this.tileService.getTiles(tile.ID)
.then(function (tiles) {
_this.tiles = tiles;
});
};
<tile-component ng-repeat="tile in DashboardCtrl.tiles" tile="tile"
on-tile-clicked="DashboardCtrl.onTileClicked()"> <!-- HERE -->
</tile-component>