我有以下简单的控制器,它使用指令/组件并将函数作为绑定传递。
当被调用的函数我没有引用使用任何控制器类服务时。
在这种情况下,在我的控制器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:
<div class="tiles-container">
<tile-component ng-repeat="tile in DashboardCtrl.tiles" tile="tile"
on-tile-clicked="DashboardCtrl.onTileClicked">
</tile-component>
</div>
指令js:
class TileComponent {
tile:ITile;
onTileClicked:Function;
/* @ngInject */
constructor() {
}
tileClicked() {
this.onTileClicked()(this.tile);
}
}
angular.module('app.dashboard')
.component('tileComponent', {
templateUrl: 'app/dashboard/directives/tile.html',
controller: TileComponent,
controllerAs: 'tileCtrl',
bindings: {
tile: '<',
onTileClicked: "&"
}
});
onTileClicked js:
DashboardController.prototype.onTileClicked = function (tile) {
var _this = this;
this.tileService.getTiles(tile.ID)
.then(function (tiles) {
_this.tiles = tiles;
});
};
答案 0 :(得分:2)
你对该函数的绑定(在html中)是错误的。你错过了括号:
<tile-component ng-repeat="tile in DashboardCtrl.tiles" tile="tile"
on-tile-clicked="DashboardCtrl.onTileClicked()"> <!-- HERE -->
</tile-component>