Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用typescript从回调中获取控制器引用_Javascript_Angularjs_Angularjs Directive_Typescript_Angularjs Components - Fatal编程技术网

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>