簡體   English   中英

TypeScript中帶有函數參數的Angular指令

[英]Angular directive with function parameter in TypeScript

我試圖將Angular函數參數添加到用TypeScript編寫的指令中,但是我必須沒有語法權利。 這是我的指令的示例:

export class NewUserDirective implements ng.IDirective {
    public restrict: string = "E";
    public replace: boolean = true;
    public templateUrl: string = '/views/_dialogs/newUserDialog.html';
    public controller = Directives.NewUserController;
    public controllerAs: string = 'Ctrl';
    public bindToController: boolean = true;
    public scope: any = {
        showDialog: '=',
        saveInProgress: '=',
        onSuccessCallback: '&',
        onClosingCallback: '&'
    };
}

這是我的控制器的片段:

export class NewUserController {
    static $inject = ["$scope", "$q", "UserServices"];

    public showDialog: boolean;
    public saveInProgress: boolean;
    public onSuccessCallback: () => void;
    public onClosingCallback: () => void;

....

    public save(): void {

        //Flag as saving
        this.saveInProgress = true;

        //Save the plan
        this.UserServices.createUser(this.newUser).then(x => {

            //When finished, hide the modal
            this.showDialog = false;

            //Let parent know new user is created
            this.onSuccessCallback();
        });
    }

}

除了父控制器中的function參數,其他所有東西都可以正常工作。 我在指令實現中嘗試了幾種不同的語法,如下所示:

    <new-user-directive on-success-callback="loadData()" ...

和這個:

    <new-user-directive on-success-callback="loadData" ...

您是否將controllerAs用於具有loadData方法的外部控制器? 如果是這樣,那么您將需要像這樣創建指令(假設您將外部控制器命名為“ Ctrl”)。 注意Ctrl. loadData()前面

<new-user-directive on-success-callback="Ctrl.loadData()" ...

您具有controllerAs =' Ctrl ',因此on-success-callback =“ Ctrl .loadData()”

這些方法通過$ scope傳遞,而不是通過控制器傳遞。 您應該創建一個構造函數:

constructor(private $scope, ....){
}

然后像這樣從$ scope調用方法:

this.$scope.onSuccessCallback();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM